比方说,我有两个DataTable DT1和DT2单行。C#中的DataTable#
DT1有3列:Col1中,Col2中,和COL3
和
DT2有2列:可乐,COLB。
是否可以水平连接这两个DataTables,因此我得到Col1,Col2,Col3,ColA和ColB?
比方说,我有两个DataTable DT1和DT2单行。C#中的DataTable#
DT1有3列:Col1中,Col2中,和COL3
和
DT2有2列:可乐,COLB。
是否可以水平连接这两个DataTables,因此我得到Col1,Col2,Col3,ColA和ColB?
我瘦你要添加新列和复制无论是在第三个表或现有表中的一个
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"];
AFAIK否,DataSet
和DataTable
不支持自动连接。您必须手动执行连接,方法是向表中添加新列并从其他表中复制列值。
只要你只是想收集的数据可以绑定到你可以做以下:
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我刚刚猜测了连接标准和列的数据类型,因此您必须指定适合您的实际数据的那些标准。
这是一个很好的答案,但我认为问题中描述的两个表格没有共同的键。换句话说,我相信他要求加入两种潜在不同类型的数据。因此,table1中的'Col1'可能是一个'int',但table2中的ColA可能是'varchar'。 – 2010-07-15 10:36:10
Jason是正确的。他们没有共同的钥匙,他们只是携带一堆数字。 – Rabin 2010-07-15 10:50:38
通过使用多个from并将条件放在where子句中,您可以在任何情况下指定linq中的连接,如果您有外键类型关系,这只是最简单的选项。如果你可以指定如何关联每个表中的行,那么我可以用相关连接更新我的答案。 – 2010-07-15 11:37:54
当你说*加入*时,你是什么意思?你期待一两行吗? – Kobi 2010-07-15 10:13:25
我希望他们在一行中。 – Rabin 2010-07-15 10:54:48