我有以下查询:
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
如你所见,我们有ID = 1
的2条记录,我不想这样,我怎么能删除这张呢?
我为我的项目的过滤部分写了这个查询。
我按ProductGroupID
,AttributeOptionID
,ManufacturerID
进行了过滤,所有这些都是多选的!
谢谢!
答案 0 :(得分:0)
正如我在评论中所说,您可以使用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())...