如何在 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 ,我不想这样,我如何删除这个?

我为项目的过滤部分编写了此查询。我有按ProductGroupIDAttributeOptionIDManufacturerID过滤,都是多选的!

谢谢!

如何在 LINQ 中对此选择查询使用非重复

正如我在评论中所说,您可以使用Distinct扩展方法的其他重载来要求EqualityComparer

或者您可以使用的其他方式

query.GroupBy(item => item.ID).Select(grp => grp.First())...

而不是

query.Distinct()...

请不要忘记,输出不会包含示例输出中的第二条记录。

如果记录的键不仅ID,而且IDProductGroupID,则可以使用

query.GroupBy(item => new {item.ID, item.ProductGroupId} ).Select(grp => grp.First())...