1
我有很多返回列表的屬性。我通常這樣做:這兩個查詢之間是否存在性能差異?
Public ReadOnly Property activeSchedulesAsOf(ByVal target As Date) As List(Of schedule)
Get
Dim list As New List(Of schedule)
For Each c As Contract In contracts
For Each s As Schedule in c.schedules
If s.isActiveAsOf(target) Then list.add(s)
Next
Next
Return list
End Get
End Property
從這樣做是否有任何好處?
Public ReadOnly Property activeSchedulesAsOf(ByVal target As Date) As List(Of schedule)
Get
Dim list As New List(Of schedule)
For Each c As Contract In contracts
list.AddRange(c.schedules.Where(Function(s) s.isActiveAsOf(target)))
Next
Return list
End Get
End Property
它只能採取陣列快捷方式,當你實際上給它一個集合。給定一個「Where」枚舉,它仍然會依次插入。 – nmclean
@nmclean只有當它不支持'ICollection',其中'List '這樣做'ToList'會解決這個問題,我已經更新了我的答案。 –
James
但是'ToList'創建的列表也會按順序構建,否定從'AddRange'保存的時間。如果我們不需要過濾項目,那麼我們可以執行'AddRange(c.schedules)',但由於我們確實需要生成不同的序列,所以嵌套的foreach可能更有效,因爲它只創建單個列表。儘管如此,我們仍然可以對LINQ做同樣的事情,如果我們將序列展平:'contracts.SelectMany(Function(c)c.schedules).Where(...)。ToList()' – nmclean