Linq To SQL и наличие - PullRequest
       17

Linq To SQL и наличие

12 голосов
/ 16 апреля 2009

Я довольно новичок в 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;

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

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

Ответы [ 3 ]

13 голосов
/ 16 апреля 2009

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

db.Users.Where(u => u.User_x_Territories.Count == 0)
1 голос
/ 16 апреля 2009

править: хе, угадайте, кто-то избил меня до этого: (

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
}
1 голос
/ 16 апреля 2009

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

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...