如何在 LINQ 中对此选择查询使用非重复
本文关键字:查询 选择 LINQ | 更新日期: 2023-09-27 18:33:07
我有以下查询:
var query = from product in SH_Products
from product_group in SH_ProductGroups_Products.Where(c=>c.ProductID == product.ID)
from manufacturer in SH_Manufacturers.Where(c=>c.ID == product.ManufactureID)
from attributeOption_product in SH_AttributeOptions_Products.Where(c=>c.ProductID == product.ID).DefaultIfEmpty()
where !product.IsDeleted
&& !product_group.IsDeleted
&& !manufacturer.IsDeleted
&& product.Status != 0
select new
{
product.ID,
ProductGroupID = product_group.ProductGroupID,
AttributeOptionID = (int?)attributeOption_product.AttributeOptionsID,
product.ManufacturerID
};
query.Distinct().Dump();
下面是示例输出:
ID ProductGroupID AttributeOptionID ManufacturerID
1 1 75 1
1 1 76 1
2 3 17 2
3 2 3 1
4 1 NULL 1
如您所见,我们有 2 条记录与 ID = 1
,我不想这样,我如何删除这个?
我为项目的过滤部分编写了此查询。我有按ProductGroupID
、AttributeOptionID
、ManufacturerID
过滤,都是多选的!
谢谢!
正如我在评论中所说,您可以使用Distinct
扩展方法的其他重载来要求EqualityComparer
。
或者您可以使用的其他方式
query.GroupBy(item => item.ID).Select(grp => grp.First())...
而不是
query.Distinct()...
请不要忘记,输出不会包含示例输出中的第二条记录。
如果记录的键不仅ID
,而且ID
和ProductGroupID
,则可以使用
query.GroupBy(item => new {item.ID, item.ProductGroupId} ).Select(grp => grp.First())...