更新IEnumerable中的对象<>不更新?

Blu*_*ppy 6 c# linq ienumerable

我有一个包含大约80,000行的POCO类型的IEnumerable和一个包含行子集的数据库表(L2E/EF4),其中存在"错误/差异"(约5000行,但经常重复以提供约150个不同的行)项)

以下代码获取不同VSACode的"错误",然后尝试更新完整的结果集,更新JUST匹配的行...但它不起作用!

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);
Run Code Online (Sandbox Code Playgroud)

在此代码之后,i = 0

我也尝试过:

foreach (var code in vsaCodes)
    {
        results.Where(r => r.VSACode == code).Select(r => { r.Difference = true; return r; }).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

如何更新"结果"以仅设置匹配的差异属性?

Jon*_*eet 11

假设results只是一个查询(您没有显示它),每次迭代它时都会对它进行评估.如果该查询每次都创建新对象,您看不到更新.如果它返回对相同对象的引用,那么你会.

如果更改results是一个物化查询结果-例如通过添加ToList()到年底-然后再遍历results 不会发出新的查询,你会看到你的变化.