在C#中加入两个DataTable

时间:2018-02-11 02:09:30

标签: c# datatable left-join

我有以下两个数据表(DataTable),代表不同时间段的学生的PC分配:

表1:

Timeslot   PC1   PC2  PC3
1          A           B
2          A           B
3                 D
4                 D

表2:

Timeslot   PC1   PC2  PC3
1                 C         
2                 C  
3
4

是否可以将这两个DataTable连接到一个DataTable中,如下所示?

通缉:

Timeslot   PC1   PC2  PC3
1          A      C    B
2          A      C    B
3                 D
4                 D

我知道,在SQL中,它会非常简单地向左连接,但我不知道如何在C#中使用DataTables来实现这一点。

2 个答案:

答案 0 :(得分:1)

如果结果在其中一个源表中合并,则会更短,效率更高:

Table1.Rows.Cast<DataRow>().Join(Table2.Rows.Cast<DataRow>(), a => a[0], b => b[0], 
   (a, b) => {a[1] += "" + b[1]; a[2] += "" + b[2]; a[3] += "" + b[3]; return a; }).Count();

答案 1 :(得分:0)

这里使用的是LINQ:

var joinData = t1.Select().Join(t2.Select(), j1 => j1["TimeSlot"], j2 => j2["TimeSlot"],
            (j1, j2) => new { j1, j2 }).Select(j => new
            {
                TimeSlot = j.j1["TimeSlot"],
                PC1 = (string)j.j1["PC1"] != "" ? j.j1["PC1"] : j.j2["PC1"],
                PC2 = (string)j.j1["PC2"] != "" ? j.j1["PC2"] : j.j2["PC2"],
                PC3 = (string)j.j1["PC3"] != "" ? j.j1["PC3"] : j.j2["PC3"]
            });
        var resultTable = new DataTable();
        addColumns(resultTable);
        foreach(var row in joinData)
        {
            var dr = resultTable.NewRow().ItemArray = new object[] { row.TimeSlot, row.PC1, row.PC2, row.PC3 };
            resultTable.Rows.Add(dr);
            WriteLine($"{dr[0]} {dr[1]} {dr[2]} {dr[3]}");
        }