假设我有两个表: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会很棒。
编辑:表格之间有关系。答案 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}}。