如何合并两个数据表并对结果进行排序

16

问:如果我有两个像这样的DataTable:

Dt1(员工编号,员工姓名,类型)

Dt2(员工编号,员工姓名,类型)

我想将它们合并并按员工姓名排序结果。

2个回答

18
var dt1 = new DataTable(); // Replace with Dt1
var dt2 = new DataTable(); // Replace with Dt2

var result = dt1.AsEnumerable()
            .Union(dt2.AsEnumerable())
            .OrderBy (d => d.Field<string>("emp_name"));

8
很好的答案,你帮了我很多(+1),但是还缺少一件事。如果你希望结果是一个 DataTable:result.CopyToDataTable(); - wcm
这是因为问题中缺少了那个要求。 - Razor
问题:这个UNION是DISTINCT的吗?如果不是,我该如何使行DISTINCT? - Malcolm Salvador
Distinct是一项单独的操作。为此,您可以使用.Distinct()扩展方法。 - Razor
最后调用.CopyToDataTable()方法,以获取DataTable而不是IEnumerable<DataRow> - Muflix

6

我认为这段代码可以帮助你在不使用实体的情况下完成它...

Dt1.Merge(Dt2);

1
它按预期工作。如果在基表(在上面的示例中为Dt1)上没有设置任何主键,则合并的工作方式类似于“UNION ALL”。这意味着,如果基表和要合并的表中具有相同列值的行,则合并后基表中将存在两行。但是,如果在基表上设置了主键,则仅添加那些根据主键在基表中不存在的行到基表中。因此,如果在基表上设置了主键,则不会有重复项。 - Tushar R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接