2009-08-19 2 views
0

У меня есть на следующие SQL запрос:Внутренние запросы в LINQ

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

Что будет являться LINQ эквивалент этой SQL.

Благодаря

ответ

2

Это будет подобный запрос для базы данных Northwind, исключает клиентов из лондон и с идентификатором клиента 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; 

Транспонирование на ваш запрос дает,

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

Попробуйте это:

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

EDIT: Плюс это я полагаю:

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

Вот другой подход, используя Присоединяйтесь и кроме операторов:

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

Это тоже хорошо. – Waheed

Смежные вопросы