LINQ是选择新的效率所必需的

tim*_*tim 1 c# linq

如果我从列表中选择元素的子集,我通过选择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);
Run Code Online (Sandbox Code Playgroud)

var q = from n in TheseGuysHaveABunchOfProperties
        where n.State == "AK" select n;

q.ToList().ForEach(x => Debug.WriteLine(x.Name + x.Phone);
Run Code Online (Sandbox Code Playgroud)

小智 7

如果您正在使用LINQ to Objects,那就不是了.复制和分配更多临时变量时,它更可能更慢.对于LINQ to SQL,当您减少从数据库复制的数据量时,它是另一种方式.

编辑:这描述了常见的情况.对于LINQ to Objects,如果它们的检索成本很高,并且在select语句中使用了多次,则它可能是更快的复制对象.对于LINQ to SQL,请注意不要选择实际不使用的属性.