C# 使用LINQ获取一个数据表中存在的数据,而不是另一个数据表中存在的数据
我有两个C# 使用LINQ获取一个数据表中存在的数据,而不是另一个数据表中存在的数据,c#,linq,datatable,C#,Linq,Datatable,我有两个DataTables。我想得到第一个中存在但第二个中不存在的东西。我想在另一个数据表中查看结果。我想使用LINQ 第一个数据表: 第二个数据表: 注意:我从两个数据表返回的列名: crs\u名称 name 您想使用除扩展名以外的 以下是MSDN上linq的链接 从我从这个问题中得到的类似的东西 var theNonIntersect = dt1.AsEnumerable().select(r => r.Field<string>("crs_name
DataTable
s。我想得到第一个中存在但第二个中不存在的东西。我想在另一个数据表中查看结果。我想使用LINQ
- 第一个数据表:
- 第二个数据表:
注意:我从两个数据表返回的列名:
crs\u名称
name
您想使用除扩展名以外的
以下是MSDN上linq的链接
从我从这个问题中得到的类似的东西
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")));
var theNonIntersect=
dt1.AsEnumerable().select(r=>r.Field(“crs_name”)、r.Field(“name”))
。除了(dt2.AsEnumerable()。选择(r=>r.Field(“crs_name”)、r.Field(“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();
}
这将为您带来好处:
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;
然后,您可以使用以下函数将结果放入数据表:
DataTable result = rowsOnlyInDt1.CopyToDataTable();
数据表来自哪里?如果数据在SQL Server中,SQLMetal可以生成您的DBML,这样您就可以在实体中工作,LINQ变得更容易。(特别是如果外键正确的话)。嗯,很抱歉,这是Informix数据库。无法将lambda表达式转换为字符串,因为它不是委托。
尝试一下,将Linq添加到数据表
扩展HMMMM。没有语法错误,但很抱歉它不起作用。我在第一个datatable.hmmm中得到了相同的记录,这里的r.Field(“name”)
语法错误<代码>r
在当前上下文HMMM中不存在,我不使用LINQ to sql。只想用LINQ回答我的问题。我不知道什么是db
?比较应该在a.crs\u name和b.crs\u name之间
a.name和b.name
比较应该在a.crs\u name和b.crs\u name之间。。不在crs\u name和name
之间。我的意思是两个数据表中有两个同名字段:dt1:crs\u name,name
和dt2:crs\u name,name
。我想将第一个字段与第一个字段进行比较,第二个字段与第二个字段进行比较。啊哈!好的,我现在明白了。给我一点时间,我会整理我已经更新了我的答案,这更符合你的要求吗?
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;
DataTable result = rowsOnlyInDt1.CopyToDataTable();