Нужна помощь в преобразовании вложенного оператора SQL в LINQ - PullRequest
0 голосов
/ 01 мая 2009

У меня есть подобное утверждение, которое мне нужно запустить в Linq. Я начал использовать .Contains и могу заставить работать первый уровень, но, похоже, не могу понять, что мне нужно сделать, чтобы получить дополнительные уровни.

Вот оператор SQL:

select * 
from aTable
where aTableId in
    (select aTableId from bTable
    where bTableId in 
        (select bTableId from cTable
        where cTableId in
            (select cTableId from dTable
            where dField = 'a guid'
            )
        )
    )

1 Ответ

3 голосов
/ 01 мая 2009

Ну, самый простой перевод будет:

var query = from a in aTable
            where (from b in bTable
                   where (from c in cTable
                          where (from d in dTable
                                 where dField == "a guid"
                                 select d.cTableId)
                                .Contains(c.cTableId)
                          select c.bTableId)
                         .Contains(b.bTableId)
                   select b.aTableId)
                   .Contains(a.aTableId)
            select a;

Однако, вероятно, соединение будет значительно проще:

var query = from a in aTable
            join b in bTable on a.aTableId equals b.aTableId
            join c in cTable on b.bTableId equals c.bTableId
            join d in dTable on c.cTableId equals d.cTableId
            where d.dField == "a guid"
            select a;

Я не проверял, но я думаю они сделают то же самое ...

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