链接 LINQ 语句是否会导致多次迭代?
例如,假设我想使用 where 子句过滤数据,然后对匹配项进行求和:
int total = data.Where(item => item.Alpha == 1 && item.Beta == 2)
.Sum(item => item.Qty);
Run Code Online (Sandbox Code Playgroud)
这是否会导致数据的单次交互,从而与此等效?
int total = 0;
foreach (var item in data)
if (item.Alpha == 1 && item.Beta == 2)
total += 1;
Run Code Online (Sandbox Code Playgroud)
或者,是否迭代data一次,和第二次的结果where做求和?
LINQ 中的语句是流式传输的,因此在枚举其值Where之前不会实际运行。Sum这意味着其中的项目data将被有效地枚举一次。
基本上,该Where方法创建一个新的IEnumerable<T>,但实际上并没有枚举data。 对fromSum进行 aforeach操作,依次从序列中一次拉出一个项目。IEnumerable<T>WhereWhere
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |