【问题标题】:Which is the better method to use LINQ?使用 LINQ 的更好方法是什么?
【发布时间】:2011-10-30 18:01:10
【问题描述】:

我有这两行,它们的作用完全相同。但写法不同。哪种做法更好,为什么?

firstRecordDate = (DateTime)(from g in context.Datas
                                   select g.Time).Min();

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time);

【问题讨论】:

  • 我怀疑这是个人喜好问题。我个人觉得第二个更清晰、更简单,但我相信其他人的想法正好相反。我相信有人将能够确认他们是否编译为相同的东西。 :)

标签: c# linq


【解决方案1】:

方法语法和查询在语义上没有区别 句法。此外,一些查询,例如那些检索 匹配指定条件或检索的元素的数量 源序列中具有最大值的元素,只能 表示为方法调用。

http://msdn.microsoft.com/en-us/library/bb397947.aspx

也看这里:.NET LINQ query syntax vs method chain

这取决于您对什么感到满意以及您发现什么更具可读性。

【讨论】:

    【解决方案2】:

    第二个使用lambda 表达式。我喜欢它,因为它紧凑且易于阅读(尽管有些人会发现前者更易于阅读)。

    另外,如果您有 SQL 背景,第一个更适合。

    【讨论】:

      【解决方案3】:

      我想说的是对您的开发团队来说最易读或最容易理解的内容。大约一年后回来看看你是否还记得那个 LINQ……嗯,这个特殊的 LINQ 显然很简单,所以没有实际意义:-)

      最佳实践也很固执,你不会在这里得到一个答案。在这种情况下,我会选择第二项,因为它简洁,我个人可以比第一项更快地阅读和理解它,尽管只是稍微快一点。

      【讨论】:

        【解决方案4】:

        我个人更喜欢使用 lambda 表达式。据我所知,您说的两种方式都可以做完全相同的事情,并没有真正的区别。我们同意所有人都使用 lambda,因为它易于阅读、遵循和为不喜欢 SQL 的人学习。

        【讨论】:

          【解决方案5】:

          假设您确实以每种格式编写了等效的语句,则结果绝对没有区别。

          为任何给定的查询寻找最易读的查询。带有连接和许多 where 子句等的复杂查询通常更容易在 linq 查询语法中编写/读取,但像 context.Employees.SingleOrDefault(e => e.Id == empId) 这样的非常简单的查询使用方法链接语法更容易。没有普遍的“一个更好”的规则,对于任何给定的示例,两个人可能会有不同的意见。

          【讨论】:

            【解决方案6】:

            这两个语句之间没有语义差异。你选择哪一个纯粹是风格偏好的问题

            【讨论】:

              【解决方案7】:

              您需要在其中任何一个中进行显式转换吗? Time 不是已经是 DateTime 了吗?

              我个人更喜欢第二种方法,因为我发现扩展方法语法比 LINQ 语法更熟悉,但这实际上只是个人喜好,它们执行相同。

              第二个写成更精确地看起来像第一个将是context.Datas.Select(x => x.Time).Min()。所以你可以看到你是如何用Min(x => x.Time)写的可能会稍微更有效率,因为你只有一个操作而不是两个

              【讨论】:

                【解决方案8】:

                查询理解语法实际上被编译为对扩展方法的一系列调用,这意味着这两种语法在语义上是相同的。无论您喜欢哪种风格,都应该使用。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-05-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-07-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-04-02
                  相关资源
                  最近更新 更多