операторы linq как в - PullRequest
       25

операторы linq как в

1 голос
/ 14 ноября 2008

HI

У меня есть 3 таблицы: Клипы , Книги и отношения между ClipBook

Проблема: мне нужно получить книгу , которая имеет bookID = 4 с некоторыми клипами, я имею в виду многие-ко-многим

в простом текстовом sql это будет примерно так:

select * from Clips where clipID in (select clipID from ClipBook where bookID=4)

Вопрос:

Как я могу сделать это с Linq без оператора Присоединиться конечно

Ответы [ 3 ]

2 голосов
/ 14 ноября 2008
1 голос
/ 14 ноября 2008

это может быть решением;

from cb in ClipBooks
where cb.BookID == 4
select cb.Clip;

или

ClipBooks.Where(cb => cb.BookId == 4).Select(cb => cb.Clip);
1 голос
/ 14 ноября 2008

Метод Contains в Linq конвертируется в оператор IN, пример:

String[] cities = {"London", "Paris", "Madrid"};

from p in context.Person
where cities.Contains(p.Adress.City)
select p

переводится в предложение sql, например: .. WHERE a.City in ('London', 'Paris', 'Madrid'), где a - псевдоним таблицы адресов после объединения с таблицей Person.

редактирование:

вы могли бы написать один запрос без подзапроса, но это, скорее всего, будет преобразовано в объединение:

var clips = (from c in context.ClipBooks
             where c.BookID == 4
             select c.Clip).Distinct();

или

var clips =  from c in context.Clip
             where c.ClicBooks.Any( cb => cb.BookID == 4)
             select c

Любой переводится в Exists ()

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