【问题标题】:How to use linq-to-sql group by to list duplicated records?如何使用 linq-to-sql group by 列出重复记录?
【发布时间】:2010-08-25 13:30:32
【问题描述】:

假设我有两个表:类别和产品。我想使用 linq-to-sql 选择具有重复产品的所有类别(带有产品)。 我的查询是这样的:

from p in db.Products
group p by p.CategoryId into c
select new 
{
 categoryId = c.Key,
 products = from PbyC in c 
 group PbyC by PbyC.Name into dupl
 where dupl.Count() > 1
 select dupl;
}

它可以工作,但 LINQPad 列出了空类别(没有任何重复的产品)。如何修改查询?

如果能以某种方式显示类别名称而不是 ID,那就太好了。

编辑:我有表之间的关系。

【问题讨论】:

  • 您正在获取没有相关产品的类别?我正在阅读此查询的方式,这应该是不可能的,因为您只是在查询 Products 表...
  • 结果是 IOrderedQueryable> 。所以类别ID列表和重复产品的嵌套列表。有些类别实际上是空的,但会显示出来。

标签: c# linq-to-sql


【解决方案1】:
db.Products.GroupBy(p => new { p.Name, p.CategoryId })
           .Select(g => new { g.Key.CategoryId, Count = g.Count })
           .Where(ng => ng.Count > 1)
           .Select(ng => ng.CategoryId);

这将选择具有多个同名产品的类别的 ID,并假设您没有在对象之间设置任何关系,因此您需要将结果连接到 @987654322 @table 获取详细信息。

如果您确实设置了关系,那么您可以随时将CategoryId 更改为Category(或任何相关对象的名称),然后在最后一个Select 中选择Category.Name

【讨论】:

  • 我有表之间的关系。
猜你喜欢
  • 2010-11-15
  • 2010-12-31
  • 2011-04-18
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多