我想通过在不使用任何foreach循环的情况下从vlist中创建值来更新vmlist。
目前我只是使用foreach
循环执行此操作,但我想用LINQ替换此foreach
foreach (var item in vlist){
vmlist.Where(list => list.SId==item.SId && list.ParameterId==item.ParameterId && list.WId==item.WId)
.Select(li => { li.Value = item.Value; return li; }).ToList();
}
答案 0 :(得分:4)
您当前的方法效率非常低 - 它是O(N * M)和它会在每次迭代时创建一个列表。
使用连接会更有效 - 我仍然会使用foreach
循环,但将查询部分与更新部分分开:
var pairsToUpdate = from original in vmlist
join item in vlist
on new { original.SId, original.ParameterId, original.WId }
equals new { item.SId, item.ParameterId, item.WId }
select new { original, item };
foreach (var pair in pairsToUpdate)
{
pair.original.Value = pair.item.Value;
}
Select
副作用