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)

在c#中,我有两个匿名列表。最后一个linq语句工作得很好,直到出现空值。没有什么回报。我甚至想过使用左连接,但没有成功。

那么如何使用匿名类型列表处理上面的查询呢?

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();

c# SQL To Linq - Where子句多变量比较(var1+var2) !=(var1+var2)

我不完全确定这就是你要找的,但我要试一试:

尝试将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语法(我更舒服),但希望你明白我在这里要做什么。我很想知道如果你把这个放到你的程序中会发生什么(如果我猜对了你所有的意思!)。我会回头看看你是否添加了任何信息!