【问题标题】:LINQ query formsLINQ 查询表单
【发布时间】:2015-08-21 11:46:42
【问题描述】:

我经常看到以以下任何一种形式编写的 linq 查询:

表格#1:

from t1 in table1 
where t1.SomeField == "Something"
select t1.FieldName

表格#2:

table1.Where(c=> c.SomeField == "Something").Select(n=> new {n.FieldName})
  • 这两种形式的 Linq 查询有什么区别?
  • 性能有什么不同吗?
  • 此外,当我搜索 Linq 查询教程时,我总是会得到以下结果 第一种形式,如果我想学习第二个 Linq 的语法 下面的表格,搜索时使用什么关键字?

【问题讨论】:

  • 第一个只是语言扩展,编译时会转换成第二个。所以没有性能差异。第二种形式使用 LINQ extension methods。也许这就是您正在寻找的关键字。

标签: c# linq


【解决方案1】:
  1. 第二个是短 lambda 表达式
  2. 不,但是第二个写起来更快。
  3. 使用lamba表达式查找。

许多人认为第一个版本更容易阅读。 不过 lambda 写起来比较快,个人觉得和第一个一样清晰。

祝你好运!

【讨论】:

    【解决方案2】:

    第一个叫query expression,第二个叫lambda expression,它们是等价的。两种语法将编译为完全相同的代码。编译器在编译之前将查询表达式更改为等效的 Lambda 表达式,因此生成的 IL 完全一样。
    还有一件事
    链式 lambda 更具可读性。

    【讨论】:

      【解决方案3】:

      第一种形式使用查询语法,第二种形式称为 lambda 表达式。性能上没有区别,但是第二种形式依赖于泛型委托,这使您可以更灵活地从外部层插入表达式,或将它们作为方法参数传递。

      参考:https://msdn.microsoft.com/en-us/library/bb397687.aspx 了解更多信息。

      搜索 LINQ lambda 表达式。

      【讨论】:

      • lambda 版本如何更灵活?不同之处在于它的书写方式。您也可以使用第一种方法命名表以便链接
      • @PieterSchool 你能在查询语法中的where 子句中插入表达式吗?你可以在 lambda 中做到这一点。
      • jou 可以像在 sql 中一样命名使用的“对象”并引用命名变量来执行 where 语句。编码需要更长的时间,但这是可能的。
      • @PieterSchool 如果您可以添加一个示例,我将不胜感激,因为我以前从未见过。但是为了支持我的观点,你提到它“需要更长的时间来编码”这有点支持我的论点,即 lambda 更灵活。
      • @PieterSchool 我也将不胜感激。
      【解决方案4】:

      Form #2 是实际的 c# 表单。

      Form #1 只是为 Form #2 添加了语法糖和查询格式。

      我更喜欢 Form # 2,因为它与 c# 代码很好地对齐。

      【讨论】:

      • 实际的c#形式,我的意思是它遵循c#语法,查询形式有特殊的语法。
      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多