流畅和查询表达式——其中一种比另一种有什么好处吗? [关闭]

2023-12-05

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

两者之间有什么区别,或者其中一种比另一种有什么特别的好处吗?


两者都没有更好:它们满足不同的需求。当您想要利用查询语法时,它就会发挥作用多个范围变量。这种情况发生在三种情况下:

  • 使用let关键字时
  • 当您有多个生成器时(from条款)
  • 进行连接时

这是一个示例(来自 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 };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅和查询表达式——其中一种比另一种有什么好处吗? [关闭] 的相关文章

随机推荐