2009-04-15 22 views
12
'a sahip olmak

Oldukça yeni Linq To SQL için yeni ama oldukça basit bir SQL sorgusu olmalıdır ve LINQ'da nasıl güzel oynayacağınızı anlamaya çalışıyorum. Linq To SQL ve

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) 

Sadece bir bölge tahsis onlar bölge user_x_territory gerrund kontrol etmektir varsa anlatmak için tek yol yok tüm kullanıcılar almaya çalışırken.

Ben bu konuyla benim DB dışına kullanıcılarının tüm almak mümkün:

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; 

Ama oradan G/Arama sonuçlarını daraltmak zorunda tarafından bir grup eklemek anlamaya olamaz yalnızca bölgeleri olmayan kullanıcıları gösterir.

Yardımlarınız için teşekkür ederiz. Bunun ne kadar etkili olduğunu bilmiyorum

cevap

13

aşağıdaki çözüm önermek.

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

Korku veren! çok teşekkürler, seni linq ile bunu yapabilir bilmiyordum. – Chelsea

+0

* rofl * Cevabınızı benimkinden daha çok seviyorum! +1 –

+1

LINQ her şeyi yapabilir ...: D –

1

(Ben çok tahmin ediyorum), ancak böyle bir şey deneyebilirsiniz:

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

düzenleme: heh, sanırım birileri beni alt :(

 
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 
}