我有一个像这样的 Linq 语句:
var records = from line in myfile
let data = line.Split(',')
select new { a=int.Parse(data[0]), b=int.Parse(data[1]) };
var average = records.Sum(r => r.b)!=0?records.Sum(r => r.a) / records.Sum(r => r.b):0;
我的问题是: 在最后一行中,records.Sum(r => r.b)计算了多少次? 当需要计算总和时(在这种情况下,有3个Sum()),LINQ是否每次都要循环所有记录(因此循环3次)?还是聪明地只循环一次并计算所有总和?
编辑1:
1.我想知道是否有办法通过仅一次遍历所有记录来改进它(因为我们只需要在单个循环中执行它时使用普通的for循环)? 2.真的没有必要在我们可以进行求和和平均值之前将所有内容都加载到内存中。当从文件中加载每个元素时,我们肯定可以对每个元素进行求和。是否有任何方法也可以减少内存消耗?
编辑2: 只是为了澄清一下,我以前没有使用过LINQ。使用普通的while / for循环可以实现所有性能要求。但是我尝试通过使用LINQ来提高可读性并减少代码行数。似乎我们无法同时获得两者。
sum == 0
,则执行一次),无论是否针对数据库。 - Rob