Есть ли не подзапрос для Linq для Enties, как в этом T-SQL - PullRequest
3 голосов
/ 08 декабря 2010

Предположим, что классическая таблица сотрудников со своими ссылками, где у каждого сотрудника может быть не более одного ReportsTo, создана с использованием этого фрагмента T-SQL и примеров данных:

create table Employees
(
    Id          int identity primary key,
    Name        nvarchar(30),
    Region      nvarchar(10),
    ReportsTo   int null
        foreign key(ReportsTo) references Employees(Id)
)

insert into Employees values('Boss','HO',null)
insert into Employees values('Underling', 'HO',
        (select Id from Employees where Name='Boss'))
insert into Employees values('Self Important', 'Region 1',
        (select Id from Employees where Name='Underling'))
insert into Employees values('Very Underling', 'Region 1',
        (select Id from Employees where Name='Self Important'))

Я могу выбрать менеджера для региона 1с этим T-SQL

select * from Employees 
where Region = 'Region 1' and 
ReportsTo not in (select Id from Employees where Region = 'Region 1')

Другими словами, менеджер - это сотрудник, который не имеет отчетов в своем регионе.

Теперь, как определить менеджера для Региона 1 с помощью Linq

Ответы [ 2 ]

6 голосов
/ 08 декабря 2010

Как насчет этого:

from e in context.Employee
where e.Region == "Region 1" 
&& !(from e2 in context.Employee
     where e2.Region == "Region 1"
     select e2.Id).ToList().Contains(e.ReportsTo)
select e;
0 голосов
/ 08 декабря 2010

Я полагаю, что вы можете делать запросы внутри запросов через Linq. Похоже на ниже

db.Employees.Where(u => u.Region = 'Whatever').Where(u =>
    db.Employees
    .Where(v => ReportsTo <> 'Whatever')
    .Select(v => v.Id)
    .Contains(u.Id)
)

это может потребовать некоторой работы, прежде чем она будет готова, но я думаю, что это общая идея

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...