C#中的DataTable

时间:2010-07-15 10:06:54

标签: c# visual-studio-2005

假设我有两个DataTables DT1和DT2只有一行。

DT1有3列:Col1,Col2和Col3

DT2有两列:ColA,ColB。

是否可以水平加入这两个DataTable,以便获得Col1,Col2,Col3,ColA和ColB?

3 个答案:

答案 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否,DataSetDataTable不支持自动加入。您必须通过向表中添加新列并从其他表复制列值来手动进行连接。

答案 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我刚刚猜到了连接标准和列的数据类型,因此您必须根据实际数据指定这些标准。