2009-08-19 7 views
0

J'ai la requête SQL que vous avez choisi:requêtes internes à LINQ

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

Quel sera l'équivalent LINQ à ce SQL.

Merci

Répondre

2

Ce serait une requête similaire pour la base de données Northwind, exclut les clients de londres et avec identification du client 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; 

Transposer sur votre requête donne,

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

Essayez ceci:

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

EDIT: plus ce que je suppose:

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

est ici une approche différente à l'aide Devenez membre et sauf opérateurs:

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

C'est aussi bon. – Waheed