我有这两行,完全相同。但是用不同的方式写。哪种做法更好,为什么?
firstRecordDate = (DateTime)(from g in context.Datas
select g.Time).Min();
firstRecordDate = (DateTime)context.Datas.Min(x => x.Time);
答案 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)
查询理解语法实际上编译为对扩展方法的一系列调用,这意味着这两个语法在语义上是相同的。无论您喜欢哪种风格,都应该使用它。