Ответ 1
Я предлагаю следующее решение.
db.Users.Where(u => u.User_x_Territories.Count == 0)
Я новичок в 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;
Но оттуда я не могу понять, как добавить группу //, чтобы уточнить результаты поиска, чтобы показывать только пользователей без территорий.
Спасибо за любую помощь.
Я предлагаю следующее решение.
db.Users.Where(u => u.User_x_Territories.Count == 0)
Я не знаю, насколько это эффективно (я думаю, не очень), но вы можете попробовать что-то вроде этого:
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);
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 }