2014-01-19 1 views
1

У меня есть 2 datatables, которые я создал соединение. Затем я смогу скопировать это обратно в новый datatable. Это прекрасно и работает без проблем. Однако, если у меня есть данные с большим количеством столбцов, скажем 30 с различными типами данных, как я могу скопировать их все в новый datatable без указания каждого столбца, т. Е. Похоже на SQL-запрос? Спасибо.Запрос Linq на большой datatable

var results = from table1 in dt.AsEnumerable() 
join table2 in names.AsEnumerable() 
on table1.Field<int>("Id") equals table2.Field<int>("Id") 
select new 
{ 
    C1 = table1.Field<int>("Id"), 
    C2 = table1.Field<int>("Col1"), 
    C3 = table1.Field<int>("Col2"), 
    C4 = table2.Field<String>("Name") 
}; 

DataTable sout = dt.Clone(); 

sout.Columns.Add("Name", typeof(string)); 

foreach (var v in results) 
{ 
    sout.Rows.Add(v.C1,v.C2,v.C3,v.C4); 
}; 
+0

Вы должны указать полученный результат 'DataRow'! –

ответ

0

Первый набор первичных ключей для ваших таблиц.

dt.PrimaryKey = new[] {dt.Columns["Id"]}; 
names.PrimaryKey = new[] { names.Columns["Id"] }; 

Тогда, если вы не возражаете dt изменения вы можете объединить таблицы с кодом,

dt.Merge(names,false, MissingSchemaAction.AddWithKey); 

Если вы возражаете clone АДС и сделать то же самое.