c# SQL To Linq - Where子句多变量比较(var1+var2) !=(var1+var2)
本文关键字:var1+var2 比较 变量 To SQL Linq 子句 Where | 更新日期: 2023-09-27 18:10:16
我有这些工作在sql大数据集工作很棒。然而,我很难转换到linq-我是新的linq
Select * from table1 t1, table2 t2 where (t1.RoleId+t1.UserId)!=(t2.RoleId+t2.UserId)
。
另一方面,当两个变量分开时,我得到了不想要的结果。
含义如下:where (t1.RoleId != t2.RoleId && t1.UserId != t2.UserId)
那么如何使用匿名类型列表处理上面的查询呢?
Linq语句,我到目前为止
var roleUserList =
(
from rls in roleResouceList
join user in userResourceList
on rls.FullResource.ToUpper() equals user.FullResource.ToUpper()
orderby rls.RoleID, user.UserID, rls.Res1, rls.Res2, rls.Res3
select new
{
RoleID = rls.RoleID,
UserID = user.UserID,
ServerId = rls.ServerID,
FullResource = rls.FullResource,
RlsRes1 = rls.Res1,
RlsRes2 = rls.Res2,
RlsRes3 = rls.Res3
}).Distinct().ToList();
var missingRoleUserList =
(
from rls in rlsCount
join usr in usrCount
on rls.Res1 equals usr.Res1
where rls.Total > usr.Total
select new
{
UserID = usr.UsrID,
RoleID = rls.RoleID
}).Distinct().ToList();
List<string> outputRoleUserList =
(
from rls in roleUserList
from mis in missingRoleUserList
where (rls.RoleID + rls.UserID) != (mis.RoleID +mis.UserID)
select rls.UserID + ",'"" + rls.RoleID
).DefaultIfEmpty().Distinct().ToList();
我不完全确定这就是你要找的,但我要试一试:
尝试将Linq中的where子句链接到SQL中,您可能会得到更好的结果:
List<string> outputRoleUserList =
from rls in roleUserList
from mis in missingRoleUserList
where rls.RoleID != mis.RoleID
where rls.UserID != mis.UserID
select rls.UserID + ",'"" + rls.RoleID
实际生成的SQL如下:
rls.RoleId != mis.UserID AND rls.UserId != mis.UserID
然而,你已经在roleUserList和missingRoleUserList上强制执行,所以你在第三个Linq语句中使用的不是真正的Linq到SQL,而是Linq到对象,如果我阅读正确的话。
我很想看到一些额外的信息或澄清,然后也许我会更好地理解发生了什么!
编辑:我意识到另一种可能性,这是可能的对象。用户id或对象。RoleID抛出一个内部NullPointerException并失败,因为其中一个值返回null。您可以使用以下命令解决此问题:
List<string> outputRoleUserLIst2=roleUserList
.Where(x => x != null && x.UserID != null && x.RoleID != null && missingRoleUserList
.Where(y => y != null && y.UserID != null && y.RoleID != null && y.RoleID!=x.RoleID && y.UserID!=x.UserID)
.FirstOrDefault()!=null)
.Select(x => x.UserID + ",'"" + x.RoleID).Distinct().ToList();
这不是很漂亮,这是另一种Linq语法(我更舒服),但希望你明白我在这里要做什么。我很想知道如果你把这个放到你的程序中会发生什么(如果我猜对了你所有的意思!)。我会回头看看你是否添加了任何信息!