我有一个包含大约 80,000 行的 POCO 类型的 IEnumerable 和一个数据库表 (L2E/EF4),其中包含存在“错误/差异”的行子集(大约 5000 行,但经常重复给出大约 150 个不同的条目)
以下代码获取不同的 VSACode 的“错误”,然后尝试更新完整的结果集,仅更新匹配的行...但它不起作用!
var vsaCodes = (from g in db.GLDIFFLs
select g.VSACode)
.Distinct();
foreach (var code in vsaCodes)
{
var hasDifference = results.Where(r => r.VSACode == code);
foreach (var diff in hasDifference)
diff.Difference = true;
}
var i = results.Count(r => r.Difference == true);
在这段代码之后,i = 0
我也试过:
foreach (var code in vsaCodes)
{
results.Where(r => r.VSACode == code).Select(r => { r.Difference = true; return r; }).ToList();
}
如何更新“结果”以仅设置匹配的差异属性?
最佳答案
假设 results
只是一个查询(您还没有显示它),它会在您每次迭代它时被评估。如果该查询每次都创建新对象,您将不会看到更新。如果它返回对相同对象的引用,你会的。
如果您将results
更改为物化 查询结果 - 例如通过将 ToList()
添加到末尾 - 然后遍历 results
不会发出新查询,并且您会看到您的更改。
关于c# - 更新 IEnumerable<> 中的对象不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304372/