2009-04-15 107 views
12

我对Linq To SQL相当新,但试图运行一个相当简单的SQL查询,并且无法弄清楚如何使它在LINQ中表现良好。Linq To SQL并有

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的唯一途径的所有用户。

我能够用它来获取所有用户的我的DB的:

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; 

但是从那里我无法弄清楚如何/有细化搜索结果添加组只显示没有地区的用户。

感谢您的任何帮助。

回答

13

我建议以下解决方案。

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

真棒!谢谢你,我不知道你能做到这一点使用LINQ。 – Chelsea 2009-04-15 20:43:15

1

我不知道如何有效的,这是(我猜不是很),但你可以尝试这样的事:

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

编辑:嘿,你猜有人打我给它:(

 
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 
}