2009-04-15 20 views
12

私はかなりLinq To SQLに慣れていますが、かなり単純なSQLクエリでなければならないものを実行しようとしており、LINQでうまくいくようにする方法を理解できません。ただ、割り当てられた領土を持っていないすべてのユーザーを取得しようとしてLinq To SQLと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 
}