簡體   English   中英

僅當組中的所有項目均為“ true”時,才對linq進行計數

[英]linq count group only if all items in group are 'true'

給定下面的示例數據,我需要一個linq查詢,該查詢返回所有3個倉庫中庫存物品的數量。 在下面的示例中,它應該返回2 ,因為在所有3個倉庫中只有skus ABC-123JKL-789是ins庫存。 但是我的查詢返回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();

您的查詢返回3,因為您的Count()是不受限制的,這意味着它對所有組進行計數,而不僅僅是對所有庫存中存在的組進行計數。

通過調用All(item => item.InStock)添加條件以僅計算所需的項目:

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

請注意,現在Where去了,以便所有項目都包含在組中。

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

盡管dasblinkenlight解決方案更好,因為它包括添加新倉庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM