如果我从列表中选择元素的子集,我通过选择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,请注意不要选择实际不使用的属性.