2012-04-05 13 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 

ストアの棚の合計数を取得する最も簡単な方法は何ですか? I.店舗の場合、Areas.Countを使用してエリアの総数を取得します。

また、各エリアをループして棚番を集計する必要がありますか? C#の

答えて

5

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

online converterを使用して、ないVB男)

+0

素晴らしいもの、まさに私が欲しかったもの。 迅速な対応に感謝します! – Tom

2

用途このLINQ式

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

:VBに

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

に変換さ注意これは@BrokenGlassの答えとは違うと思う。彼は最初にネストされたコレクションをSelectManyで平坦化し、結果のアイテムの合計数を数えます。つまり、アイテムの総数に対してループします。ここでは、外側のコレクションをループするだけで、内側のコレクションのCountプロパティを合計します。これははるかに速くなければなりません。

+0

ありがとうオリバー、これも動作します! – Tom

関連する問題