2009-08-19 15 views
0

Ich habe die folowing SQL-Abfrage:Inner-Abfragen in LINQ

Select * 
from aspnet_Users 
where UserId Not in 
(select UN.ConnectedToUserID 
from tblUserNetwork UN) 
    and UserId <> '82522f05-2650-466a-a430-72e6c9fb68b7' 

Was wird die LINQ entspricht dieser SQL sein.

Dank

Antwort

2

Dies ist eine ähnliche Abfrage für Northwind-Datenbank sein würde, es Kunden aus ausschließt London und mit Kundennummer ALFKI

var query = 
from c in Customers 
where c.CustomerID != "ALFKI" && 
!(from cc in Customers 
     where cc.City == "London" 
     select cc.CustomerID) 
     .Contains(c.CustomerID) 
select c; 

auf Ihre Anfrage Transponieren gibt,

var query = 
from c in aspnet_Users 
where c.UserId != "82522f05-2650-466a-a430-72e6c9fb68b7" && 
!(from cc in tblUserNetwork 
     select cc.ConnectedToUserID) 
     .Contains(c.UserId) 
select c; 
1

Versuchen Sie folgendes:

aspnet_Users.Where(s => tblUserNetwork 
        .Where(t => s.UserId == t.ConnectedToUserID).Count() == 0) 
      .Select(s => s); 

EDIT: Plus dieses Ich nehme an:

aspnet_Users.Where(s => tblUserNetwork 
        .Where(t => s.UserId == t.ConnectedToUserID).Count() == 0 
        && s.UserId != '82522f05-2650-466a-a430-72e6c9fb68b7') 
      .Select(s => s); 
1

Hier ist ein anderer Ansatz bei und Außer Operatoren:

var connectedUsers = aspnetUsers 
    .Join(networkUsers, a => a.UserId, n => n.UserId, (a, n) => a); 

var exceptions = aspnetUsers 
    .Where(a => a.UserId == "82522f05-2650-466a-a430-72e6c9fb68b7") 
    .Union(connectedUsers); 

var query = aspnetUsers.Except(exceptions); 
+0

Dies ist auch gut. – Waheed