2017-05-26 71 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解決方案更好,因爲它涵蓋了添加新的倉庫。

相關問題