2010-01-15 67 views
0

是否將項目X的子集合存儲在項目X的父集合中以便緩存在父集合上執行的「過濾器查詢」? (它們不會一起使用(如顏色和類型一樣)。)或者,也可以僅循環收集並在臨時集合中返回正確的實體?將集合內的子集合(主集合的過濾版本)存儲爲集合?

Class ItemCollection : Inherits Collection(Of Item) 
    Private _types as New List(Of ItemCollection) //Cache 

    Function FilterByType(type) As ItemCollection 
     If Not _types.KeyExists(type) Then 
      _types.Add(type, New ItemCollection()) 
      For Each i in Me 
       If i.Type = type Then _types(type).Add(i) 
      Next 
     End If 
     Return _types(type) 
    End Function 

    //Same for FilterByColor(color) 
End Class 

Class Item 
    Public Color = "Blue" 
    Public [Type] = "One" 
End Class 

回答

1

我會建議保持簡單入手,然後添加緩存,如果測試顯示,再生過濾列表是一個性能問題。除此之外,通過使用內置於List或使用LINQ擴展的過濾方法,可以大大簡化過濾代碼。

filtered = Me.Where(i => i.Type = type) 

(我可能是關閉的確切語法,我從來沒有做過LINQ在VB.NET,我是一個C#的傢伙。)

+0

我開始使用LINQ,即固定我的很多問題!確實非常快 – Ropstah 2010-01-15 23:29:01