c# - 更新 IEnumerable<> 中的对象不更新?

标签 c# linq ienumerable

我有一个包含大约 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/

相关文章:

c# - 如何知道 IEnumerable<ValueType> 是否为空,而不计算全部?

c# - 如何自动更新我用 C# 开发的应用程序?

c# - 在List对象的属性上具有条件的foreach循环

c# - 直接使用 Linq 表达式变量而不是 lambda 表达式时出错

c# - Azure CosmosDB Contains 方法不起作用

c# - ELI5 : How does converting an IEnumerable to a list or array avoid the performance penalty of multiple enumeration of IEnumerable?

c# - 将数组转换为 IEnumerable<T>

c# - 如何跟踪循环中完成了多少异步任务?

c# - Lambda 表达式委托(delegate)实例或表达式树?

c# - 与对象类型一起使用