2010-02-24 36 views
0

剛開始使用LINQ開發,仍然無法理解一些簡單的東西。 所以, LinqTable.SingleOrDefault(t=>(t.Field1=="value1"))等於SQL "SELECT * FROM LinqTable WHERE Field1="value1" LIMIT 1"簡單的Linq問題:如何用邏輯運算符創建查詢

如何創建(使用LINQ),如"SELECT * FROM LinqTable WHERE Field1="value1" AND Field2="value2" LIMIT 1查詢?

+0

只是注意 - 如果有多個匹配記錄,SingleOrDefault將拋出異常。 'FirstOrDefault'不會。 – 2010-02-24 19:12:21

回答

3

的SingleOrDefault(T =>(t.Field1 == 「值1」 & & t.Field2 == 「值2」))

+0

我之前試過,它沒有用,我發誓!但現在我再試一次,它的工作原理。謝謝 – setrul 2010-02-24 19:13:52

+0

+1,你不必使用extra()。 @Setrul:更好地理解LINQ,做一個Google搜索「LINQ 101」 – Zyphrax 2010-02-24 19:17:02

1

通常情況下,你想使用Where做到這一點:

var result = LinqTable.Where(t => t.Field1 == "value1" && t.Field2 == "value2").SingleOrDefault(); 

您可以在的SingleOrDefault線直接做到這一點還有:

var result = LinqTable.SingleOrDefault(t => t.Field1 == "value1" && t.Field2 == "value2"); 
+0

不要使用Where,而是使用接受謂詞的SingleOrDefault的重載。 – Zyphrax 2010-02-24 19:16:17

+0

這兩個選項都可以正常工作,並且實際上會在EF和L2S中創建相同的SQL。就我個人而言,在這種情況下,我發現使用Where更具描述性,給出OP的目標。 – 2010-02-24 19:23:23

3
LinqTable.Where(row => row.Field1 == "value1" && row.Field2 == "value2").FirstOrDefault(); 
+0

FirstOrDefault()的+1。如上所述,這個問題並不表明這些值會找到一個獨特的結果。 – 2010-02-24 19:15:54