什么是linq查询将取代我的两个foreach

时间:2009-05-20 08:00:34

标签: linq

我正在努力弄清楚如何更换下面的两个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;
                }
            }
        }
    }

我认为会有一种linq方式来执行相同的操作。谢谢你的帮助。

Larsi

1 个答案:

答案 0 :(得分:7)

嗯,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;
}

请注意,这在内存方面效率较低,因为它将所有已更改的行加载到字典中(内部),以便它可以根据行ID快速查找更改的行 - 但这意味着循环复杂度要小得多(O(n) + O(m)而不是O(n * m)如果每行只匹配一个更改的行,反之亦然。)