我坚持下一个行为:
var contracts = result.Select(this.Map);
foreach (var contract in contracts) {
contract.Id = 1;
}
return contracts;
循环后contract.id
未更新且仍具有初始值。
var contracts = result.Select(this.Map).ToList();
解决了我的问题,但我无法弄清楚为什么我无法更新迭代变量的属性?
答案 0 :(得分:3)
您需要记住 LINQ查询的结果是表示查询的对象,而不是该查询的结果。 contracts
是一个对象,在迭代时,将执行底层集合中每个对象到新对象的映射。每次迭代时,它都会再次执行映射。
在您的情况下,您正在迭代源集合,执行映射,编辑这些对象,将这些对象放在地板上,再次迭代集合,再次执行映射,然后查看那些对象,当然你看不到的编辑。
当您致电ToList
时,您现在不再存储查询,而是该查询的结果,并且会观察对该集合中的项目的编辑,因为您'在后续迭代中重新查看相同的项目。