Присоединение к DataTable с использованием LINQ в C # - PullRequest
2 голосов
/ 30 марта 2012

Я соединяю две таблицы данных с использованием LINQ следующим образом:

 DataTable targetTable = dataTable1.Clone();
 var dt2Columns = dataTable2.Columns.OfType<DataColumn>().Select(dc =>
        new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
 var dt2FinalColumns = from dc in dt2Columns.AsEnumerable()
                       where targetTable.Columns.Contains(dc.ColumnName) == false
                       select dc;
 targetTable.Columns.AddRange(dt2FinalColumns.ToArray());

 var rowData = from row1 in dataTable1.AsEnumerable()
               join row2 in dataTable2.AsEnumerable()
               on row1.Field<string>("keyCol") equals row2.Field<string>("keyCol")
               select row1.ItemArray.Concat(row2.ItemArray.Where(r2 => row1.ItemArray.Contains(r2) == false)).ToArray();
 foreach (object[] values in rowData)
     targetTable.Rows.Add(values);

Здесь я сталкиваюсь с тремя проблемами:

  1. В случае, если количество строк не совпадает для двух таблицЯ хочу передать значение по умолчанию или назначить пустую строку для значений, не найденных в другой таблице.Как мне этого добиться?
  2. Если у меня несколько столбцов и мне нужно сравнить с AND, как это возможно?
  3. Что если мне нужно объединить несколько таблиц во время выполнения.Есть ли способ генерировать динамический LINQ?

1 Ответ

2 голосов
/ 30 марта 2012

Если обе таблицы имеют одинаковый первичный ключ DataTable.Merge будет работать:

dataTable1.Merge(dataTable2 ,false, MissingSchemaAction.Add);

Это объединит схему (столбцы) обеих таблиц, объединит строки, имеющиетот же первичный ключ и добавьте остальные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...