C# 如何使用linq减去两个数据表
有没有办法减去两个数据表,使第一个数据表的行不在第二个数据表中 我尝试过下面这样的.Except()方法,但它对我不起作用C# 如何使用linq减去两个数据表,c#,linq,datatable,C#,Linq,Datatable,有没有办法减去两个数据表,使第一个数据表的行不在第二个数据表中 我尝试过下面这样的.Except()方法,但它对我不起作用 dt1.AsEnumerable().Except(dt2.AsEnumerable()).CopyToDataTable(); 我想我在使用这个方法时犯了错误,但我没有发现?,除了,因为引用不同,所以不起作用。内存中数据行的每个“副本”都是一个不同的对象,因此在中进行的相等性比较将始终返回false 您需要与类似的东西进行比较,比如行ID。如何做到这一点,有几个想法:
dt1.AsEnumerable().Except(dt2.AsEnumerable()).CopyToDataTable();
我想我在使用这个方法时犯了错误,但我没有发现?
,除了
,因为引用不同,所以不起作用。内存中数据行的每个“副本”都是一个不同的对象,因此在中进行的相等性比较将始终返回false
您需要与类似的东西进行比较,比如行ID。如何做到这一点,有几个想法:
var rowsInFirstNotInSecond = dt1.Rows.Where(r1=>!dt2.Rows.Any(r2=>r1.ID == r2.ID));
或:
除外
将不起作用,因为引用不同。内存中数据行的每个“副本”都是一个不同的对象,因此在中进行的相等性比较将始终返回false
您需要与类似的东西进行比较,比如行ID。如何做到这一点,有几个想法:
var rowsInFirstNotInSecond = dt1.Rows.Where(r1=>!dt2.Rows.Any(r2=>r1.ID == r2.ID));
或:
您可以使用创建自己的比较器
您可以使用创建自己的比较器
我使用以下代码将两个数据表相减:
var query =
from row1 in dt1
where !(from row2 in dt2
select row2.ID)
.Contains(row1.ID)
select row1;
这段代码返回的正是我想要的…我使用以下代码将两个数据表相减:
var query =
from row1 in dt1
where !(from row2 in dt2
select row2.ID)
.Contains(row1.ID)
select row1;
此代码返回的正是我想要的…此代码确实有效:
var rows =dtFirst.AsEnumerable().Except(dtSecond.AsEnumerable(), DataRowComparer.Default);
DataTable result = null;
if (rows.Count() != 0)
result = rows.CopyToDataTable();
此代码确实有效:
var rows =dtFirst.AsEnumerable().Except(dtSecond.AsEnumerable(), DataRowComparer.Default);
DataTable result = null;
if (rows.Count() != 0)
result = rows.CopyToDataTable();
你有钥匙吗?如果不是,两行什么时候相等?@Kobi,不,我没有键,但两个数据表都有相同的列,当然还有一些相同的行(我指的是一些具有相同值的行)。你有键吗?如果不是,两行何时相等?@Kobi,不,我没有键,但两个数据表都有相同的列,当然还有一些相同的行(我指的是具有相同值的一些行)。