使用LINQ获取存在于一个DataTable中但不存在于另一个DataTable中的内容
本文关键字:DataTable 另一个 不存在 存在 于一个 LINQ 使用 获取 | 更新日期: 2023-09-27 18:05:12
我有两个DataTable
。我想要得到在第一个中存在但在第二个中不存在的东西。我想要另一个DataTable
的结果。我想使用LINQ.
- 第一个数据表:
DataTable dt1 = cc1roleDAL.GetAll(x, 0);
- 第二个数据表:
DataTable dt2 = cc1roleDAL.GetSpecific(x);
注意:我从两个数据表返回的列名:
crs_name
name
这将为您完成任务:
var rowsOnlyInDt1 = dt1.AsEnumerable().Where(r => !dt2.AsEnumerable()
//make sure there aren't any matching names in dt2
.Any(r2 => r["crs_name"].Trim().ToLower() == r2["crs_name"].Trim().ToLower() && r["name"].Trim().ToLower() == r2["name"].Trim().ToLower()));
或者如果您喜欢查询语法:
var rowsOnlyInDt1 = from r in dt1.AsEnumerable()
//make sure there aren't any matching names in dt2
where !dt2.AsEnumerable().Any(r2 => r["crs_name"].Trim().ToLower() == r2["crs_name"].Trim().ToLower() && r["name"].Trim().ToLower() == r2["name"].Trim().ToLower())
select r;
然后可以使用CopyToDataTable函数将结果放入数据表中:
DataTable result = rowsOnlyInDt1.CopyToDataTable();
您想使用Except
扩展名
这是MSDN上的链接。
我从这个问题中得到的信息是这样的。
var theNonIntersect =
dt1.AsEnumerable().select(r => r.Field<string>("crs_name"), r.Field<string>("name"))
.Except(dt2.AsEnumerable().select(r => r.Field<string>("crs_name"), r.Field<string>("name")));
你好,希望这段代码对你有帮助,如果我有误解,然后可以问我编辑这篇文章
DataContext db = new DataContext();
var result = from a in db.dt1
from b in db.dt2
where a.crs_name != b.name
select a.crs_names;
foreach(var names in result)
{
dt2Entity obj = new dt2Entity();
obj.name = names.name;
db.InsertOnSubmit(obj);
db.SubmitChanges();
}