2013-07-19 24 views
0

У меня есть два DataTable с двумя столбцами в каждом Table. Теперь, я хочу сравнить эти два DataTable и соответствующие строки в третьем DataTable в C#.Как сравнить два Datatable и получить общие записи в другой DataTable на C#?

Например:

DataTableA 
ColA1 ColA2 
1  sampletext1 
2  sampletext2 
4  sampletext4 

DataTableB 
ColB1 ColB2 
1  sampletext1 
2  sampletext2 
3  sampletext3 

DataTableC 
ColC1 ColC2 
1  sampletext1 
2  sampletext2 

Я пробовал используя для цикла, но это замедляет. Любая другая альтернатива.

+1

Каковы ваши критерии поиска? Кроме того, вы можете опубликовать свой существующий код для цикла. –

+0

Как это связано с Linq-to-Entities? 'DataTable' - это объект в памяти. –

+0

привет @Jakub Konecki, обе колонки из таблицы А, соответствующие обеим столбцам из tableB, и если они совпадают, получите строку в третьем datatable ..! –

ответ

0
for(i=0;i<dt1.rows.count;i++) 
{ 
    if (dt2.rows.count > i) 
    { 
     if((dt1.rows[i][1] == dt2.rows[i][1]) && (dt1.rows[i][2] == dt2.rows[i][2])) 
      { 
       dt3.rows.add(dt.rows[i]) 
      } 

    } 
} 
0

Первая функция использования слияния объединить два DataTable и finnaly для петли на DataTable и найти результат по функции выбора:

dt1 = dt.Copy(); 
dt1.Merge(dt2); 

//Here match condition third Data table 
for(int i=0; i <=dt1.rows; i++) 
{ 
    DataRow[] foundRows = dt3.Select("page_name='" + dt1.[i]['colname'] + "'"); 
    //function or code here; 
} 
2

Не уверен, что именно ваши критерии соответствия является. ниже может быть полезно.

см this

public static DataTable CompareTwoDataTable(DataTable dt1, DataTable dt2) 
{ 
    dt1.Merge(dt2); 
    DataTable d3 = dt2.GetChanges(); 
    return d3; 
} 
+1

Ничего себе, какое прекрасное и короткое решение. Хотя очень старый вопрос, если вы можете помочь мне таким же образом, но те же данные DataTable, которые мне нужно сравнивать, не имеют одинакового значения. столбцов. –

1

Использование, как показано ниже. Он будет работать быстрее

var matched = from table1 in dt1.AsEnumerable() 
         join table2 in dt2.AsEnumerable() on table1.Field<string>("sno") equals table2.Field<string>("sno") 
         where table1.Field<string>("name") == table2.Field<string>("name") 
         select table1; 
     if (matched.Count()>0) 
     { 
      DataTable dtt = matched.CopyToDataTable(); 
     } 

Не забудьте указать в качестве ответа, если это поможет.

+0

Как это будет работать быстрее? Быстрее чем? Как вы протестировали производительность? –

Смежные вопросы