在选择使用 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 扩展方法,imo 使用 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 查询。
其他人可以添加吗?有没有人有自己的小规则,或者他们的公司是否建议/强制使用一个?