LINQ是。net自泛型以来最大的改进之一,它为我节省了大量的时间和代码。然而,对我来说,流畅的语法似乎比查询表达式语法更自然。

var title = entries.Where(e => e.Approved)
    .OrderBy(e => e.Rating).Select(e => e.Title)
    .FirstOrDefault();

var query = (from e in entries
             where e.Approved
             orderby e.Rating
             select e.Title).FirstOrDefault();

两者之间有什么区别吗?或者两者之间有什么特别的好处吗?


当前回答

微软的文件如下:

作为一条规则,当你编写LINQ查询时,我们建议你尽可能使用查询语法,必要时使用方法语法。在两种不同的形式之间没有语义或性能上的差异。查询表达式通常比用方法语法编写的等效表达式更具可读性。

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/#query-expression-overview

他们还说:

要开始使用LINQ,你不需要大量使用lambdas。但是,某些查询只能用方法语法表示,其中一些查询需要lambda表达式。

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq

其他回答

我已经使用Linq 6个月了。当我第一次开始使用它时,我更喜欢查询语法,因为它非常类似于T-SQL。

但是,我现在逐渐转向前者,因为将可重用代码块编写为扩展方法并将它们链接在一起很容易。虽然我确实发现把每个子句放在单独的行上对可读性有很大帮助。

流畅的语法确实看起来更强大,它也应该更好地将代码组织成小的可重用方法。

我知道这个问题是用c#标记的,但是VB.NET的Fluent语法非常冗长。

我完全不懂查询语法。在我看来,没有理由这么做。let可以通过. select和匿名类型来实现。我只是觉得在里面加上标点符号看起来更有条理。

我更喜欢查询语法,因为我来自使用SQL的传统web编程。这对我来说更容易理解。然而,它认为我将开始使用. where (lambda),因为它肯定更短。