2010-12-08 59 views
0

我想知道這兩種語法之間的區別:當我需要選擇第一個項目時,Where(lambda expr。)和First(lambda expr。)之間有什麼區別?

return db.Contacts.First(x => x.ContactID == id) 

,我一直使用至今,直到我得到一個錯誤「序列不包含任何元素」。那麼我必須再次使用下面的那個。

return db.Contacts.Where(x => x.ContactID == id).First(); 

必須有一個細微差別我沒有得到正確的。

感謝您的幫助。

回答

2

First用於獲取序列的第一個元素,但它也需要一個謂詞來允許您篩選IEnumerable序列。

因此,First將返回IEnumerable的第一個元素,其中包含1個或多個結果。

First(Predicate)將返回具有1個或更多結果的IEnumerable中的結果的第一個元素。

如果在使用First時有0個元素,您將得到錯誤序列不包含元素。如果您預期的結果爲0,則應使用FirstOrDefaultFirstOrDefault也可以採用謂詞,即,

// Will return null if there are no elements with a matching contact Id 
return db.Contacts.FirstOrDefault(x => x.ContactID == id); 
+0

爲什麼首先會返回多於1個結果? – Richard77 2010-12-08 16:56:04

相關問題