Подтвердить что ты не робот

Linq To SQL и наличие

Я новичок в Linq To SQL, но пытаюсь запустить то, что должно быть довольно простым SQL-запросом, и не может понять, как сделать его приятным в LINQ.

SELECT     Users.Id, Users.Id AS Expr1, Users.FirstName, Users.LastName, 
User_x_Territory.UserID
FROM         Users LEFT OUTER JOIN
             User_x_Territory ON User_x_Territory.UserID = Users.Id
GROUP BY Users.Id, Users.Id, Users.FirstName, Users.LastName, User_x_Territory.UserID
HAVING      (COUNT(User_x_Territory.UserID) = 0)

Просто пытаясь получить всех пользователей, у которых нет назначенной территории, единственный способ узнать, есть ли у них территория, - проверить user_x_territory gerrund.

Я могу получить всех пользователей из моей БД с этим:

var users = from u in db.Users
            join uXt in db.User_x_Territories on u equals uXt.User into gerr
            from users in gerr.DefaultIfEmpty()
            select users;

Но оттуда я не могу понять, как добавить группу //, чтобы уточнить результаты поиска, чтобы показывать только пользователей без территорий.

Спасибо за любую помощь.

4b9b3361

Ответ 1

Я предлагаю следующее решение.

db.Users.Where(u => u.User_x_Territories.Count == 0)

Ответ 2

Я не знаю, насколько это эффективно (я думаю, не очень), но вы можете попробовать что-то вроде этого:

var users = (from u in db.Users
             join uXt in db.User_x_Territories on u equals uXt.User into gerr
             from users in gerr.DefaultIfEmpty()
             select u).Where(u => u.User_x_Territories.Count == 0);

Ответ 3

edit: heh, думаю, кто-то избил меня к нему: (

from t in db.Users
join t0 in db.User_x_Territory on new { UserID = t.Id } equals new { UserID = t0.UserID } into t0_join
from t0 in t0_join.DefaultIfEmpty()
group new {t, t0} by new {
  t.Id,
  Column1 = t.Id,
  t.FirstName,
  t.LastName,
  t0.UserID
} into g
where   g.Count() == 0
select new {
  Id = g.Key.Id,
  Expr1 = g.Key.Id,
  g.Key.FirstName,
  g.Key.LastName,
  UserID = g.Key.UserID
}