如何查找数据表的NOT
本文关键字:数据表 NOT 查找 何查找 | 更新日期: 2023-09-27 18:19:19
我有两个数据表,例如,dt1和dt2.Dt1包含所有国家列表,dt2包含少数国家列表。我需要一个数据表dt3,它应该包含所有国家,除了dt2中的国家列表。
使用Enumerable。Except(IEnumerable, IEnumerable) Method:
DataTable onlyInFirstTable = dt1.AsEnumerable().Except(dt2.AsEnumerable()).CopyToDataTable();
要使用Except
,您需要使用接受IEqualityComparer<DataRow>
的重载,因为默认比较器将返回dt1
中的所有行,因为它们与dt2
中的DataRow
s不同。
public class CountryRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow r1, DataRow r2)
{
return r1["Country"] == r2["Country"];
}
public int GetHashCode(DataRow r)
{
return r["Country"].GetHashCode();
}
}
您可以获得dt1
中不在dt2
中的国家,如下所示:
var dt3 = dt1.AsEnumerable().Except(dt2.AsEnumerable(), new CountryRowComparer()).CopyToDataTable();
如果您不想为此而创建IEqualityComparer
类,另一种获取dt1
中不在dt2
中的国家的方法是:
var exclude = dt2.AsEnumerable()
.Select(r => r.Field<string>("Country"));
var dt3 = dt1.AsEnumerable()
.Where(r => !exclude.Contains(r.Field<string>("Country")))
.CopyToDataTable();