2009-05-20 4 views
0

아래의 두 foreach를 대체하는 방법을 알아 내려 고투하고 있습니다.내 두 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를 기반으로 변경된 행을 신속하게 찾을 수 있도록합니다. 그러나 루핑 복잡성은 훨씬 작음 (각 행이 변경된 행 하나와 일치하는 경우에만 O(n * m) 대신을 입력하고 그 반대의 경우도 마찬가지입니다.

+0

+1 작업을 논리적으로 분리하여 하나의 linq-query로 모두 채우는 대신에. 린크에 대한 오해에 대한 질문에 대답 한 사람은 모든 것에 사용해야합니다. =) –

관련 문제