2010-07-20 86 views
3

我試圖找出Where(Expression)和Single(Expression)之間的區別。Where和Single之間的區別

將表達式傳遞給單個轉發給Where函數嗎?

例如,這兩個表述是否相同?

var result = context.Persons.Single(p => p.ID == 5); 
var result2 = context.Persons.Where(p => p.ID == 5).Single(); 

回答

5

Single回報你一個Person,而Where將返回一個IEnumerable<Person>

將where表達式傳遞給單個表達式只是語法糖。

這兩條線在功能上是等效的。我想象的第一個可能會更有效率。在我看來,這也更容易。

0

雖然有另一個區別。如果所使用的謂詞返回多個元素,則Single()將引發異常。如果篩選器應用於枚舉值時只返回一個元素,則返回該元素而不拋出異常。

int[] a = {1, 2, 3}; 
var odd_Nos = a.Single(num => num % 2 != 0) // will throw exception (an InvalidOperationException) 
var even_Nos = a.Single(num => num % 2 == 0) // will not throw exception 

如果您只希望第一個出現,您可以使用First()或FirstOrDefault()方法。