假设我有两个DataTables DT1和DT2只有一行。
DT1有3列:Col1,Col2和Col3
和
DT2有两列:ColA,ColB。
是否可以水平加入这两个DataTable,以便获得Col1,Col2,Col3,ColA和ColB?
答案 0 :(得分:2)
我很瘦,你必须在第三个表或现有表格
中添加新列和复制数据 DataTable dt1 = new DataTable();
dt1.Columns.Add("col1", typeof(string));
dt1.Columns.Add("col2", typeof(string));
dt1.Columns.Add("col3", typeof(string));
DataTable dt2 = new DataTable();
dt2.Columns.Add("cola", typeof(string));
dt2.Columns.Add("colb", typeof(string));
object[] row = {'1', '2', '3'};
dt1.Rows.Add(row);
object[] row1 = { 'a', 'b' };
dt2.Rows.Add(row1);
// Create columns in dt1
dt1.Columns.Add("cola", typeof(string));
dt1.Columns.Add("colb", typeof(string));
// Copy data from dt2
dt1.Rows[0]["cola"] = dt2.Rows[0]["cola"];
dt1.Rows[0]["colb"] = dt2.Rows[0]["colb"];
答案 1 :(得分:0)
AFAIK否,DataSet
和DataTable
不支持自动加入。您必须通过向表中添加新列并从其他表复制列值来手动进行连接。
答案 2 :(得分:0)
只要您想要一个可以绑定到您的集合,您就可以执行以下操作:
var results = from rs1 in table1.Rows.Cast<DataRow>()
join rs2 in table2.Rows.Cast<DataRow>() on rs1.Field<int>("col1") equals rs2.Field<int>("colA")
select new { col1 = rs1.Field<int>("col1"), col2 = rs1.Field<string>("col3"), col3 = rs1.Field<string>("col3"), colA = rs1.Field<int>("colA"), colB = rs1.Field<string>("colB") };
您不会获得DataTable
,而是会在select语句中定义的IEnumerable<T>
匿名类型对象集合。 Obvoiusly我刚刚猜到了连接标准和列的数据类型,因此您必须根据实际数据指定这些标准。