LINQ - Select(), SelectMany()

创建时间:
2018-10-12 17:18
最近更新:
2018-10-14 18:31

T: 理解二者最好的途径是源码

理解 SelectMany - 网摘

SelectMany 操作符提供了将多个 from 子句组合起来的功能,相当于数据库中的多表连接查询,它将每个对象的结果合并成单个序列。

理解 SelectMany - 网摘

Select()SelectMany() 的工作都是依据源值生成一个或多个结果值。
Select() 为每个源值生成一个结果值。因此,总体结果是一个与源集合具有相同元素数目的集合。
SelectMany() 将生成单一总体结果,其中包含来自每个源值的串联子集合。作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。然后,SelectMany() 将串联这些可枚举序列以创建一个大的序列。

测试记录 - 在 Select() 中赋值操作无效,原因未明

测试环境

  • 2018-10-14
  • CodeGen

无效一

int idx = 0;
clsTbs.Select(clsTb => {
    clsTb.Idx = idx;
    clsTb.IsFirst = idx == 0;
    clsTb.IsLast = idx == clsTbs.Count - 1;
    idx++;
    return clsTb;
});

无效二

clsTbs.Select((clsTb, idx) => {
    clsTb.Idx = idx;
    clsTb.IsFirst = idx == 0;
    clsTb.IsLast = idx == clsTbs.Count - 1;
    return clsTb;
});

有效

for(int i = 0; i < clsTbs.Count; i++) {
    clsTbs[i].Idx = i;
    clsTbs[i].IsFirst = i == 0;
    clsTbs[i].IsLast = i == clsTbs.Count - 1;
}