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();
两者之间有什么区别吗?或者两者之间有什么特别的好处吗?
当我可以用这种方式编写整个表达式时,我更喜欢使用后者(有时称为“查询理解语法”)。
var titlesQuery = from e in entries
where e.Approved
orderby e.Rating
select e.Titles;
var title = titlesQuery.FirstOrDefault();
只要我必须添加(括号)和. methodcalls(),我就会改变。
当我使用前者时,我通常每行放一个子句,像这样:
var title = entries
.Where (e => e.Approved)
.OrderBy (e => e.Rating)
.Select (e => 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