2009-04-15 30 views
12

Ich bin relativ neu zu Linq To SQL, aber zu versuchen, was eine ziemlich einfache SQL-Abfrage sein sollte und kann nicht herausfinden, wie man es in LINQ nett zu machen.Linq To SQL und

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) 

Nur versuchen, alle Benutzer zu erhalten, die, die einzige Art und Weise, wenn sie ein Gebiet zu erzählen haben nicht ein Gebiet zugewiesen hat, ist die user_x_territory gerrund zu überprüfen.

Ich bin in der Lage alle Benutzer mit dieser aus meinem DB zu bekommen:

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; 

Aber von dort kann ich nicht herausfinden, wie man eine Gruppe hinzufügen, indem Sie/mit den Suchergebnissen verfeinern zeige nur Nutzer ohne Gebiete an.

Danke für jede Hilfe.

Antwort

13

ich schlage vor, die folgende Lösung.

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

Awesome! vielen Dank, ich wusste nicht, dass mit Linq tun könnte. – Chelsea

+0

* rofl * Ich mag deine Antwort mehr als meine! +1 –

+1

LINQ kann alles tun ...: D –

1

Ich weiß nicht, wie effizient das ist (ich vermute, nicht sehr), aber man könnte so etwas wie diese versuchen:

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

edit: heh, denke, dass mich jemand sie schlagen :(

 
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 
}