2010-02-24 37 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