我想知道如何更换下面的两个foreach.
public void UpdateChangedRows(List<Row> changedRows)
{
// How to write linq to update the rows (example code using foreach)
foreach (Row row in table.Rows)
{
foreach (Row changedRow in changedRows)
{
if (row.RowId==changedRow.RowId)
{
row.Values = changedRow.Values;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为会有一种linq方式来执行相同的操作.谢谢你的帮助.
Larsi
好吧,LINQ更多的是查询而不是更新,所以我仍然将它分成LINQ查询然后foreach循环来进行更新:
var query = from row in table.Rows
join changedRow in changedRows on row.RowId = changeRow.RowId
select { row, changedRow };
foreach (var entry in query)
{
entry.row.Values = entry.changedRow.Values;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这在内存方面效率较低,因为它将所有已更改的行加载到字典中(内部),以便它可以根据行ID快速查找更改的行 - 但这意味着循环复杂性很多较小(O(n) + O(m)而不是O(n * m)每行只匹配一个更改的行,反之亦然).