LINQ中两种查询类型有什么区别?

时间:2009-12-04 02:26:50

标签: linq

我有一张名为“MYTABLE”的桌子。这有两列“FIRSTNAME”和“LASTNAME”。 下面两个查询返回相同的结果是IQueryable<MYTABLE>

dataContext.MYTABLEs.Where(f => f.FIRSTNAME == firstName && f.LASTNAME == lastName);

from t in dataContext.MYTABLEs
where t.FIRSTNAME == firstName && t.LASTNAME == lastName select t;

有什么区别?哪两个查询更快?

4 个答案:

答案 0 :(得分:8)

他们都是一样的。您可以使用lambda(方法)语法(第一种方法)或查询语法(第二种方法)编写LINQ查询。后者只是语法糖,两者都被编译成同样的东西。

来自LINQ Query Syntax versus Method Syntax MSDN文章:

  

没有语义差异   方法语法和查询之间   句法。另外,有些疑问,   比如检索号码的那些   匹配指定的元素   条件,或检索   具有最大值的元素   一个源序列,只能是   用方法调用表示。

可以找到类似的问题here

答案 1 :(得分:2)

这些编译为相同的IL。后者是前者的语法糖(即,编译器在输出IL之前仅将查询语法转换为方法语法)。

然而,两者之间存在一些细微差别。有些查询只能在方法语法中表示(例如,data.Count(somePredicate)data.Max(somePredicate))。

有关LINQ查询语法与方法语法的其他讨论,请参阅MSDN

答案 2 :(得分:1)

他们完全相同。他们都编译成相同的MAIL。一个是在IQueryable上调用方法,另一个是使用添加到C#的扩展来执行相同的操作。

答案 3 :(得分:0)

它们是相同的,应该编译成相同的代码。