【问题标题】:what is the difference between two query type in LINQ?LINQ 中的两种查询类型有什么区别?
【发布时间】:2009-12-04 02:26:49
【问题描述】:

我有一个名为“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;

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

【问题讨论】:

    标签: linq


    【解决方案1】:

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

    来自LINQ Query Syntax versus Method SyntaxMSDN 文章:

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

    可以找到类似的问题here

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        它们一模一样。它们都编译为相同的 MSIL。一种是调用 IQuerable 上的方法,另一种是使用添加到 C# 的扩展来做同样的事情。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-06
            • 1970-01-01
            • 2018-07-12
            • 1970-01-01
            • 2012-06-04
            相关资源
            最近更新 更多