2017-02-06 8 views
0

私は2つのDataTableを持っていると私はいくつかのcolumns.hereでそれらに参加したいが複数の条件列で2つのデータテーブルを結合するにはどうすればよいですか?

 DataTable targetTable = dtl.Clone(); 
     var dt2Columns = dt.Columns.OfType<DataColumn>().Select(dc => 
      new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping)); 
     targetTable.Columns.AddRange(dt2Columns.ToArray()); 
     var rowData = 
      from row1 in dtl.AsEnumerable() 
      join row2 in dt.AsEnumerable()     
       on row1.Field<string>("header") 
      equals row2.Field<string>("header") 
      where (row1.Field<string>("digitnumber") != "") 
      select row1.ItemArray.Concat(row2.ItemArray).ToArray(); 
     foreach (object[] values in rowData) 
      targetTable.Rows.Add(values); 

私のコードですが、それは一つだけcondition.Iに参加するには、以下のようなコードたい:

DataTable targetTable = dtl.Clone(); 
     var dt2Columns = dt.Columns.OfType<DataColumn>().Select(dc => 
      new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping)); 
     targetTable.Columns.AddRange(dt2Columns.ToArray()); 
     var rowData = 
      from row1 in dtl.AsEnumerable() 
      join row2 in dt.AsEnumerable()     
       on row1.Field<string>("header") and row1.Field<string>("digitrow") and row1.Field<string> ("response") 
      equals row2.Field<string>("header") and row1.Field<string>("question") and and row1.Field<string> ("answer") 
      where (row1.Field<string>("digitnumber") != "") 
      select row1.ItemArray.Concat(row2.ItemArray).ToArray(); 
     foreach (object[] values in rowData) 
      targetTable.Rows.Add(values); 

をが、複数の条件にいくつかのエラーがあります。解決策は何ですか?

+0

[ON句の複数条件付きLINQ結合]の可能な複製(http://stackoverflow.com/questions/7664727/linq-join-with-multiple-conditions-in-on-clause) – PaulF

答えて

0
from table1 in dt.TableA 
join table2 in dt.Table2 on 
      new { table1.col1, table1.col2} 
      equals 
      new { table2.Column1,table2.Column2} 

あなたは比較のために同じ順序でparanthesisに複数の列を追加することができます。

関連する問題