Linq to SQL - Right Join

本文关键字:Right Join SQL to Linq | 更新日期: 2023-09-27 18:24:22

我正在尝试转换此查询(已在工作)

select [User].ID AS ID_USER
from [User]
right join Building on Building.ID = 4 AND
                       Building.ID_USER_RESPONSIBLE <> [User].ID
where [User].ID_MANAGER = 1

从Linq到SQL,但我不知道自己做错了什么。看看我的

IList<User> lstUser = (from building in db.GetTable<Building>()
                       join user in db.GetTable<User>()
                       on new
                       {
                           ID_BUILDING = building.ID,
                           ID_USER = building.ID_USER_RESPONSIBLE
                       }
                       equals new
                       {
                           ID_BUILDING = 4,
                           ID_USER != user.ID
                       } into grpUser
                       from grp in grpUser.DefaultIfEmpty()
                       where building.ID_MANAGER = 1
                       select new 
                       {
                           ID_USER = 
                        });

我需要归还所有用户加上对任何建筑不负责的用户;

编辑

这里发布的任何解决方案都有效。我决定只做这个:

 var lstUser = (from building in db.GetTable<Building>()
                join user in db.GetTable<User>()
                on building.ID equals 4
                where user.ID_MANAGER == 1 &&
                      building.ID_USER_RESPONSIBLE != user.ID
                select new 
                {
                       ID_USER = user.ID,
                       NAME = user.NAME
                }).ToList();

Linq to SQL - Right Join

查看以下是否有效:

IList<User> lstUser = (from building in db.GetTable<Building>()
                       join user in db.GetTable<User>()
                       on new
                       {
                           ID_BUILDING = building.ID,
                           ID_USER = building.ID_USER_RESPONSIBLE,
                           building.ID_MANAGER
                       }
                       equals new
                       {
                           ID_BUILDING = 4,
                           ID_USER = user.ID,
                           1
                       } into grpUser
                       from grp in grpUser.DefaultIfEmpty()
                       select new 
                       {
                           ID_USER = grp.ID
                        });

话虽如此,你的要求似乎有差距,"我需要返回所有用户加上对任何建筑不负责的用户;"我可能读错了你的声明,但不负责建筑的用户列表不是更大的"所有用户"集合的子集。因此,您将始终只获得所有用户,而不管他们的建筑成员资格如何。