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