两个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操作相同的结果
你可以使用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)