2011-05-27 42 views

回答

5

最好是使用帶有兩個測試第二次在一個單一的拉姆達。它只會循環一次列表,並且只能經常調用委託的一半。第一個版本循環兩次列表。

只是要清楚,這是更好的選擇:

list.Where(x => x.Prop1 == value1 && x.Prop2 == value2).ToList(); 

這也可以寫成

var results = 
    (from x in list 
    where x.Prop1 == value1 && x.Prop2 == value2 
    select x).ToList(); 

如果你能避免.ToList()通話,並使用它作爲一個IEnumerable<T>,你」通常會得到更好的性能(除非你反覆閱讀)。

+1

@Jon和Michael,第一個版本不會在列表中循環兩次。會有兩個代表,是的,但是對於序列中的每個元素都是一個接一個地執行檢查,而不是整個序列通過第一個*,然後是結果通過第二個。該列表只能走一次。 – 2011-06-16 20:03:46

+1

和喬恩,就這樣說,我同意我會選擇第二個版本。 – 2011-06-16 20:06:50