2017-05-26 33 views
1

给定下面的示例数据时,我需要一个linq查询来返回所有3个仓库中库存的项目数。在下面的例子中,它应该返回2,因为在所有3个仓库中只有skus ABC-123JKL-789是存货。但我的查询返回3?linq计数组只有当组中的所有项目都为'true'

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(); 

回答

5

查询返回3,因为你的Count()是不受限制的,这意味着它计算所有群体,不仅存在于股票的所有项目的人。

添加条件一起All(item => item.InStock)调用只计算你需要的物品:

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

注意Where现在走了,让所有的物品都包含在团体。

+1

你需要删除的地方,否则你过滤所有的项目是真的,然后检查它们是否是真的;) – Compufreak

+0

他的查询返回3,因为他只需要真正在哪里 –

+0

完美,谢谢! – PixelPaul

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

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

相关问题