Допустим, у меня есть следующая схема
Content(Id, ....)
TagContent(TagId, ContentId)
Tag(TagId, Name)
Предположим, я хотел бы выбрать все записи контента, которые имеют тег с именем "test".
В SQL я бы написал:
select Content.Id
from Content
join TagContent as TC on (TC.ContentId = Content.Id)
Join Tag on (TC.TagId = Tag.Id)
where Tag.Name = 'Test'
Не могли бы вы предложить, как написать аналогичный запрос в Linq, если у вас есть только таблица доступна?
(Я хотел бы создать метод расширения Content.ByTag ('tag') -> IQueryable)
Мне только удалось создать запрос, который использует оператор sql exists
вместо join
.
Это означает, что запросы крайне неэффективны.
Мое текущее неэффективное решение выглядит следующим образом:
DataContext.Contents.Where(c => c.TagContents.Any(tc => tc.Tag.Name == "Test"))
Примечание:
Поскольку я хотел бы создать метод расширения для DataContext.Contents, у меня не будет доступа к другим таблицам, таким как DataContext.Tag и DataContext.ContentTag.