根据下面的示例数据,我需要一个linq查询,它返回所有3个仓库中库存的商品数量。在下面的示例中,它应该返回2
,因为只有skus ABC-123
和JKL-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();
答案 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解决方案更好,因为它涵盖了添加新仓库。