1

I'm trying to convert this query (Already working)

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

To Linq to SQL, but I don't know what I'm doing wrong. Look at my trying

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 = 
                        });

I need to return all Users plus the Users which aren't responsible to any Building;

EDIT

Any of solution posted here worked. I've resolved just doing this:

 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();
gandarez
  • 2,609
  • 4
  • 34
  • 47

1 Answers1

0

See if the following works:

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

That being said, there seems to be a gap in your requirement, "I need to return all Users plus the Users which aren't responsible to any Building;" I may be mis-reading your statement but isn't the list of users that aren't responsible to a building a subset of the larger "All Users" set. As a result, you would always just get All Users regardless of their building membership.

Jim Wooley
  • 10,169
  • 1
  • 25
  • 43