我試圖找出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();
我試圖找出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();
Single
回報你一個Person
,而Where
將返回一個IEnumerable<Person>
。
將where表達式傳遞給單個表達式只是語法糖。
這兩條線在功能上是等效的。我想象的第一個可能會更有效率。在我看來,這也更容易。
雖然有另一個區別。如果所使用的謂詞返回多個元素,則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()方法。