2009-04-15 2 views
12

나는 Linq에 대해 매우 익숙하지만, 매우 간단한 SQL 쿼리가 있어야하며 LINQ에서 잘 작동하도록 만드는 방법을 찾을 수 없다. Linq To SQL and Have

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

+0

* rofl * 나는 너의 대답을 더 좋아한다! +1 –

+1

LINQ는 모든 작업을 수행 할 수 있습니다 ... D –

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 
}