var collection = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1["id"] equals t2["id"]
select new { Name = t1["name"], Group = t2["group"] };
Я хочу выбрать все столбцы обеих таблиц, например, присоединиться к SQL Server.
В дополнение Как я могу преобразовать весь результат обеих таблиц в таблицу данных?
var collection = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1["id"] equals t2["id"]
select new { T1 = t1, T2 = t2 };
затем...
РЕДАКТИРОВАТЬ:
Что-то в этом роде
//clone dt1, copies all the columns to newTable
DataTable newTable = dt1.Clone();
//copies all the columns from dt2 to newTable
foreach(var c in dt2.Columns)
newTable.Columns.Add(c);
//now newTable has all the columns from the original tables combined
//iterates over collection
foreach (var item in collection) {
//creates newRow from newTable
DataRow newRow = newTable.NewRow();
//iterate the columns, gets values from either original table if column name is there
foreach(var c in newTable.Columns)
newRow[c.ColumnName] = item.T1.ContainsColumn(c.ColumnName) ? item.T1[c.ColumnName] : item.T2[c.ColumnName];
newTable.Rows.Add(newRow);
}
Это сработает. Но если dt1 и dt2 имеют несколько столбцов с одним и тем же именем, у вас может быть некоторая потеря данных.
Хотя вы не можете расширять их до столбцов, вы можете просто вернуть объекты. Например:
select new { CTLJCRJOB, CTLRFDSTM }
Если вам нужно, чтобы он был сплющен, вам придется самим написать картографию, но все равно будет очень тривиально.
Ссылка из:
Выделить все столбцы для всех таблиц в join + linq join
ou должны указывать каждый вручную, если вы хотите проецировать в сплющенный тип. Другой вариант состоит в том, чтобы только ваш комбинированный тип содержал оба объекта, и объекты, естественно, принесли бы их свойства.
select new
{
Object1 = object1,
Object2 = output
};
И вы будете работать с ним, как myObj.Object1.Property1, myObj.Object2.Property4 и т.д.
Один из последних вариантов, который по-прежнему связан с ручной работой, заключается в определении соответствующего типа и использовании конструктора или метода построения, который выполняет работу по сегментированию свойств объекта в сплющенный тип. Вы по-прежнему выполняете ручное сопоставление, но вы изолируете его от логики запроса.
select new CombinedType(object1, output);
//or
select builder.GetCombinedType(object1, output);
Ссылка от
var collection = (from t1 in dt1.AsEnumerable() join t2 in dt2.AsEnumerable() on t1 ["id"] equals t2 ["id"] select new { Name = t1 ["name"], Group = t2 ["group"] }).ToList() ;
Надеюсь, это поможет
select new {...}