哪个是使用LINQ的更好方法?

时间:2011-08-19 15:50:29

标签: c# linq

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

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

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

8 个答案:

答案 0 :(得分:6)

  

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

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

另见:.NET LINQ query syntax vs method chain

归结为你感到满意的东西,你发现的东西更具可读性。

答案 1 :(得分:1)

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

此外,如果你有SQL背景,第一个更适合。

答案 2 :(得分:1)

我会说你的开发团队最容易阅读或理解。回来一年左右,看看你是否记得LINQ ......好吧,这个特别的LINQ显然很简单,所以没有实际意义: - )

最佳做法也很自以为是,你不会在这里得到一个答案。在这种情况下,我会选择第二项,因为它简洁,我可以比第一项更快地阅读和理解它,但速度稍快一点。

答案 3 :(得分:1)

我个人更喜欢使用lambda表达式。据我所知,没有真正的区别,因为你说你可以两种方式做同样的事情。我们同意所有人都使用lambda,因为它很容易阅读,关注并接受那些不喜欢SQL的人。

答案 4 :(得分:1)

假设您确实在每种格式中编写等效语句,结果方面完全没有区别。

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

答案 5 :(得分:1)

两个语句之间没有语义差异。你选择的只是风格偏好的问题

答案 6 :(得分:1)

你需要在其中任何一个中进行显式演员吗? Time还不是DateTime吗?

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

第二个写得更像第一个的是context.Datas.Select(x => x.Time).Min()。因此,您可以看到您使用Min(x => x.Time)编写它的方式可能会稍微提高效率,因为您只需要操作而不是两个

答案 7 :(得分:1)

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

相关问题