0

I have two datatables and I want to join them in several columns.here is my code

      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);

but it joins only on one condition.I want the code like below:

  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);

but have some errors on multiple conditions.what's the solution?help me please.

sh.h
  • 91
  • 1
  • 3
  • 12
  • Possible duplicate of [LINQ Join with Multiple Conditions in On Clause](http://stackoverflow.com/questions/7664727/linq-join-with-multiple-conditions-in-on-clause) – PaulF Feb 06 '17 at 14:43

1 Answers1

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

You can add multiple columns in the paranthesis in the same order for comparison.

Teja
  • 305
  • 1
  • 6