Есть два объекта DataTable datatable1 и datatable2. Как получить на выходе результат LINQ запроса аналогичный SQL-ному SELECT * FROM table1 INNER JOIN table2 ON condition в новом объекте DataTable? Как делать сам INNER JOIN и даже OUTER JOIN ясно.
from table1 in datatable1.AsEnumerable()
join table2 in datatable2.AsEnumerable()
on (int)table1["anID"] equals
(int)table2["anID"]
select new
{
A = (int)table1["A"],
B = (int)table1["B"],
C = (int)table2["C"],
D = (int)table2["D"]
};
А вот как получить результат в новом DataTable, не перечисляя при этом поля пример не попадается.
P.S. Вопрос не о работе с БД, а о возможностях c# + linq
Ответ
Так как нужна именно DataTable, то первоначально нужно создать ее и добавить колонки. Судя из вопроса вы хотите добавить все колонки из первой таблицы и из второй. Для этого можно воспользоваться следующим кодом.
DataTable table = new DataTable();
foreach(DataColumn column in table1.Columns){
table.Columns.Add("table1_"+column.ColumnName, column.DataType)
}
foreach(DataColumn column in table2.Columns){
table.Columns.Add("table2_"+column.ColumnName, column.DataType)
}
Теперь в новой таблице колонки из обеих таблиц и можно добавлять строки.
var rows = from table1 in datatable1.AsEnumerable()
join table2 in datatable2.AsEnumerable()
on (int)table1["anID"] equals
(int)table2["anID"]
select table1.itemArray.Concat(table2.itemArray);
Получили список массивов которые можно добавлять в DataTable.
foreach(var row in rows){
table.Rows.Add(row);
}
В итоге получили table со всеми нужными строками.
Комментариев нет:
Отправить комментарий