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();
两者之间有什么区别,或者一个比另一个有什么特别的好处?
两者都不是更好:它们满足不同的需求。当您想要利用 多个范围变量 时,查询语法就会发挥作用。这发生在三种情况下:
这是一个示例(来自 LINQPad 示例):
string[] fullNames = { "Anne Williams", "John Fred Smith", "Sue Green" }; var query = from fullName in fullNames from name in fullName.Split() orderby fullName, name select name + " came from " + fullName;
现在将其与方法语法中的相同内容进行比较:
var query = fullNames .SelectMany (fName => fName.Split().Select (name => new { name, fName } )) .OrderBy (x => x.fName) .ThenBy (x => x.name) .Select (x => x.name + " came from " + x.fName);
另一方面,方法语法公开了查询运算符的全部范围,并且对于简单的查询更加简洁。您可以通过混合查询和方法语法来获得两全其美的效果。这通常在 LINQ to SQL 查询中完成:
var query = from c in db.Customers let totalSpend = c.Purchases.Sum (p => p.Price) // Method syntax here where totalSpend > 1000 from p in c.Purchases select new { p.Description, totalSpend, c.Address.State };