<分区>
在选择在其中一种 LINQ 扩展方法中使用 LINQ 查询语法或 Lambda 表达式时,是否有人遵守任何规则(或者您是否被雇主强制遵守任何规则?)?这适用于任何实体、SQL、对象等等。
在我们的工作场所,我的老板根本不喜欢 lambda,他对任何事情都使用查询语法,在某些情况下,我发现这种语法可读性较差。
var names = collection.Select(item => item.Name);
var names = from item in collection
select item.Name;
也许在添加条件时,我发现的 Lambda 变得有点乱,
var names = collection.Where(item => item.Name == "Fred")
.Select(item => item.Name);
var names = from item in collection
where item.Name == "Fred"
select item.Name;
只是出于兴趣:编译器如何处理这个?有谁知道上面的 LINQ 查询将如何编译成 lambda?是否会为每个元素调用 Name
属性?我们可以这样做并有可能提高性能吗?这是否意味着 lambda 在性能方面更容易控制?
var names = collection.Select(item => item.Name)
.Where(name => name == "Fred");
当然,当我们开始使用越来越多的表达式时,lambda 会变得困惑,我会开始在这里使用查询语法。
var names = collection.Where(item => item.Name == "Fred")
.OrderBy(item => item.Age)
.Select(item => item.Name);
var names = from item in collection
where item.Name == "Fred"
order by item.Age
select item.Name;
还有一些我发现无法使用查询语法完成的事情。您可能认为其中一些非常简单(尤其是聚合函数),但事实并非如此,您必须在末尾添加一种 LINQ 扩展方法,在我看来,使用 lambda 表达式看起来更整洁。
var names = collection.Count(item => item.Name == "Fred");
var names = (from item in collection
where item.Name == "Fred"
select item).Count()
即使对于一些简单的 lambda 链,ReSharper建议我将它们转换为 LINQ 查询。
还有其他人可以补充吗?有没有人有自己的小规则,或者他们的公司是否建议/强制使用一个?