2012-04-05 110 views
3

採取以下情形:VB.NET LINQ - 集合中的集合計數?

Public Class Store 
    Public Overridable Property Areas As List(Of Area) 
End Class 

Public Class Area 
    Public Overridable Property Shelves As List(Of Shelf) 
End Class 

Public Class Shelf 
    Public Property ID as integer 
End Class 

什麼讓貨架上的總數爲商店的最快方法是什麼? 也就是說對於一家商店,我通過使用Areas獲得區域總數。計數

或者我是否需要遍歷每個區域並計算貨架數量?

回答

5

在C#:

int count = Store.Areas.SelectMany(x => x.Shelves).Count(); 

轉換爲VB:

Dim count = Store.Areas.SelectMany(Function(x) x.Shelves).Count() 

(使用online converter,而不是VB人)

+0

真棒東西,正是我想要的。 感謝您的快速響應! – Tom 2012-04-05 14:56:04

2

使用此LINQ表達

Dim count As Integer = store.Areas.Sum(Function(a) a.Shelves.Count()) 

注意這與@BrokenGlass的答案不同。他首先用SelectMany將嵌套集合平整,然後統計結果項目的總數,即他遍歷項目的總數。在那裏,因爲我只是循環外部集合,並總結內部集合的Count屬性。這應該快得多。

+0

謝謝奧利弗,這也適用! – Tom 2012-04-05 15:08:29