只有当组中的所有项目都是“真实”时,才会使用linq count group

时间:2017-05-26 17:38:55

标签: c# linq

根据下面的示例数据,我需要一个linq查询,它返回所有3个仓库中库存的商品数量。在下面的示例中,它应该返回2,因为只有skus ABC-123JKL-789是所有3个仓库的库存。但我的查询是返回3?

WarehouseId     Sku         InStock
===================================
1               ABC-123     true
2               ABC-123     true
3               ABC-123     true

1               XYZ-789     true
2               XYZ-789     false
3               XYZ-789     true

1               JKL-456     true
2               JKL-456     true
3               JKL-456     true




int inStock = query.Where(x => x.InStock).GroupBy(x => x.Sku).Count();

2 个答案:

答案 0 :(得分:5)

您的查询返回3,因为您的Count()不受限制,这意味着它会计算所有组,而不仅仅是库存中存在所有项目的组。

通过调用All(item => item.InStock)添加条件,仅计算您需要的项目:

var inStock = query
    .GroupBy(x => x.Sku)
    .Count(g => g.All(item => item.InStock));

请注意,Where现已消失,因此所有项目都包含在组中。

答案 1 :(得分:1)

int inStock = query
                .Where(x => x.InStock)
                .GroupBy(x => x.Sku)
                .Where(g=>g.Count() == 3)
                .Count();

尽管dasblinkenlight解决方案更好,因为它涵盖了添加新仓库。