2009-05-20 2 views
0

私は以下の2つのforeachを置き換える方法を理解するのに苦労しています。私の2つのforeachを置き換えるlinqクエリは何ですか

 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

答えて

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に基づいて変更された行をすばやく検索できるようになりますが、ループの複雑さはロットが小さい(各行が1つの変更された行にのみ一致する場合はO(n * m)の代わりにとなります。

+0

+1すべてのタスクを1つのlinq-queryにまとめるのではなく、論理的にタスクを分離するための+1。 linqについての誤解についての質問に誰かが答えたように、それはすべてに使われるべきです。 =) –