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();

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


当前回答

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

其他回答

我刚刚建立了我们公司的标准,我们强制使用扩展方法。我认为在代码中选择一个而不是另一个是一个好主意,不要把它们混在一起。扩展方法读起来更像其他代码。

理解语法并没有所有的操作符,在查询周围使用圆括号和添加扩展方法只是在恳求我从一开始就使用扩展方法。

但在大多数情况下,这只是个人喜好,只有少数例外。

每种风格都有其优点和缺点。当涉及到连接时,查询语法更好,并且它有有用的let关键字,可以很容易地在查询中创建临时变量。

另一方面,流畅的语法有很多不通过查询语法公开的方法和操作。此外,由于它们只是扩展方法,您可以编写自己的扩展方法。

我发现,每当我开始使用查询语法编写LINQ语句时,我最终不得不把它放在括号中,然后回到使用流畅的LINQ扩展方法。查询语法本身没有足够的特性。

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

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

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