使用LINQ,哪种方法更好?

5

我有这两行代码,它们的功能完全相同。但是它们的写法不同。哪种写法更好,为什么呢?

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

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

2
我认为这是个人偏好的问题。我个人认为第二种更清晰简单,但我相信其他人可能持相反意见。不过我相信有人能够确认它们是否编译成相同的东西。 :) - Chris
8个回答

6

1
第二个使用lambda表达式。我喜欢它,因为它更紧凑,更易于阅读(尽管有些人可能会发现前者更易于阅读)。
此外,如果您具有SQL背景,则第一个更适合。

1

我认为应该选择对开发团队最易读或易懂的方式。过一年再回来看看,你是否还记得那个LINQ…好吧,这个特定的LINQ显然很简单,所以这是无关紧要的 :-)

最佳实践也有很多不同的意见,你在这里不可能得到一个答案。在这种情况下,我会选择第二个选项,因为它简洁,并且我个人可以比第一个更快地阅读和理解,尽管只是略微更快。


1

我个人更喜欢使用lambda表达式。据我所知,实际上并没有什么区别,就像你说的,两种方法都可以做到完全相同的事情。我们都同意使用lambda,因为它易于阅读、遵循,并且对不喜欢SQL的人来说容易掌握。


1

假设您确实在每种格式中编写等效语句,则结果方面绝对没有任何区别。

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


1

这两个语句在语义上没有区别。选择哪一个纯粹是风格偏好的问题。


1

你们两个都需要显式转换吗?时间不是已经是DateTime了吗?

个人而言,我更喜欢第二种方法,因为我觉得扩展方法语法比LINQ语法更熟悉,但这只是个人偏好,它们的执行效果相同。

如果要让第二种写法看起来更像第一种,可以写成context.Datas.Select(x => x.Time).Min()。所以你可以看到,用Min(x => x.Time)的方式写会稍微更有效率,因为你只需要一个操作而不是两个。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接