2009-12-18 222 views

回答

5
var myLinqObj = db.MyObjects.Take(1).SingleOrDefault(); 
2

你可以使用。首先()或.FirstOrDefault()像這樣:

Foo foo = query.Select(a => a.Name == "foo").FirstOrDefault(); 
+1

如果查詢「**應該**只返回一個結果」單個更有效,因爲如果查詢返回多個查詢,它會拋出更多錯誤,並標記錯誤。 – 2009-12-18 18:36:07

+0

@Martinho Fernandes你是對的,我從來沒有使用過單一的 – 2009-12-18 20:41:25

18
// Will return a default value if no object is found in the DB 
db.Table.SingleOrDefault(x => x.something == someParameter); 

// Will throw an exception if records are not found 
db.Table.Single(x => x.something == someParameter); 

感謝邁赫達德的評論......這兩條線有已更新。

如果您的查詢可能導致返回多條記錄,則(如註釋中所述)Single()SingleOrDefault()是調用的錯誤方法。您將保持相同的語法,但分別請撥打First()FirstOrDefault()

+3

你可以用'.Single(predicate)'替換'.Where(predicate).Single()'。 – 2009-12-18 18:33:35

+1

如果序列中存在多個單個項目,Single()將引發異常。如果你不在意拋出異常,你也可以使用First()或FirstOrDefault()。 – LBushkin 2009-12-18 18:35:06

+0

@Mehrdad - 我做了改變,但兩者之間有什麼表現差異?我通常更喜歡.Where(謂詞).Single(),因爲我認爲它表達我的意圖更清晰一些。 – 2009-12-18 18:36:32

5

您可以使用FirstSingle

First返回第一行,無論是多行還是隻有一行。

Single預計只返回一行,如果有多行則拋出異常。

Single因此可能是一個更好的選擇,如果您希望只有一行,以便您能夠立即看到問題並且可以排除故障。

0

從所有已經表示,如果您使用的是LINQ到XML,我的另外一點是在使用單個元素之後使用Value屬性。

Select new { *cols* }如果它是一個列表或數組或表。 示例。 ...選擇新的{c.Name,c.Value};

這個技巧是爲了讓你獲得價值。