两个linq语句的联合

本文关键字:语句 linq 两个 | 更新日期: 2023-09-27 18:09:23

嗨,我有两个linq语句:

from d in dtDummy.AsEnumerable() 
where d["Role_id"].ToString() == "0" 
select d;`
from d in dtDummy.AsEnumerable() 
join t in dtTest.AsEnumerable() on d.Field<int>("role_id") 
equals t.Field<int>("role_id") 
where (d["role_dept"].ToString() !=  t["role_dept"].ToString() || d["role_dept"].ToString() != t["role_dept"].ToString() || d["role_desc"].ToString() != t["role_desc"].ToString() || d["role_all_clients"].ToString() != t["role_all_clients"].ToString() || d["role_admin"].ToString() != t["role_admin"].ToString() || d["role_super_admin"].ToString() != t["role_super_admin"].ToString()) 
select d;

如何编写linq单个语句来获得与在两个语句上执行union操作相同的结果

两个linq语句的联合

你可以使用Union:

var union = (from d in dtDummy...).Union
            (from d in dtDummy...);

我个人认为,为了清楚起见,我会把这两者分开:

var query1 = ...;
var query2 = ...;
var union = query1.Union(query2);

我也会使用Field<string>而不是调用ToString…或者可能将这些投影到一个更干净的对象模型中,这将使您的查询更简单。

(from d in dtDummy.AsEnumerable() where d["Role_id"].ToString() == "0" select d).union
(from d in dtDummy.AsEnumerable() join t in dtTest.AsEnumerable() on d.Field<int>("role_id") equals t.Field<int>("role_id") where (d["role_dept"].ToString() != t["role_dept"].ToString() || d["role_dept"].ToString() != t["role_dept"].ToString() || d["role_desc"].ToString() != t["role_desc"].ToString() || d["role_all_clients"].ToString() != t["role_all_clients"].ToString() || d["role_admin"].ToString() != t["role_admin"].ToString() || d["role_super_admin"].ToString() != t["role_super_admin"].ToString()) select d)