如何使用linq-to-sql group列出重复的记录?

时间:2010-08-25 13:30:32

标签: c# linq-to-sql

假设我有两个表:Category和Product。我想使用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会很棒。

编辑:表格之间有关系。

1 个答案:

答案 0 :(得分:0)

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,并假设您没有在对象之间设置任何关系,因此您需要将结果加入{{ 1}}表获取详细信息。

如果您确实建立了关系,那么您始终可以将Categories更改为CategoryId(或任何相关对象的名称),并在上一个Category中选择Category.Name 1}}。