如果我从列表中选择元素的子集,我是否通过执行 select new 仅获取我将使用的属性来获得任何东西。还是编译器只是优化它,这样我就可以停止使用 select new
,例如:
var q = from n in TheseGuysHaveABunchOfProperties
where n.State == "AK"
select new { Name = n.Name, Phone = n.Phone };
q.ToList().ForEach(x => Debug.WriteLine(x.Name + x.Phone);
对比
var q = from n in TheseGuysHaveABunchOfProperties
where n.State == "AK" select n;
q.ToList().ForEach(x => Debug.WriteLine(x.Name + x.Phone);
最佳答案
如果您正在执行 LINQ to Objects,则不会。当您复制和分配更多临时变量时,它更有可能变慢。对于 LINQ to SQL,情况正好相反,因为您减少了从数据库复制的数据量。
编辑:这描述了常见情况。在 LINQ to Objects 的情况下,如果对象的检索成本很高,并且在 select
语句中多次使用,则复制对象的速度可能更快。如果是 LINQ to SQL,请注意不要选择您实际不使用的属性。
关于c# - LINQ 是提高效率的新选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4837857/