У меня есть таблица «Ссылка» и таблица «Статья», где статья ссылается на другие статьи.
У меня есть простые ссылки, такие как: A -> B
SQL:
select ab.*
from Article a
inner join Reference ab on ab.ArticleFromId = a.Id
inner join Article b on b.Id = ab.ArticleToId
where a.ArticleNo = "1234"
C # LINQ:
_context.Reference
.Where(r => r.ArticleFromNavigation.ArticleNo.Equals("1234"));
У меня также есть цепочки ссылок, такие как: A -> B -> C (допустим, что в цепочке не более 3 статей)
SQL:
select ab.ArticleFromId, bc.ArticleToId
from Article a
inner join Reference ab on ab.ArticleFromId = a.Id
inner join Article b on b.Id = ab.ArticleToId
inner join Reference bc on bc.ArticleFromId = b.Id
inner join Article c on c.Id = bc.ArticleToId
where a.ArticleNo = "1234"
Это легко сделать в SQL, поскольку результат просто умножается на дополнительные объединения, но я не знаю, как записать это в LINQ.
Я хочу, чтобы это было что-то вроде этого (что не будет работать):
_context.Reference
.Where(r => r.ArticleFromNavigation.ArticleNo.Equals("1234"))
.Select(r => new Reference
{
ArticleFromNavigation = r.ArticleFromNavigation, //this is article "A"
ArticleToNavigation = r.ArticleToNavigation.ReferenceArticleToNavigations //this wont work as it's a iCollection
}).AsNoTrackable();
Здесь я хочу новые результаты типа "Ссылка" для "A -> C".Я предполагаю, что мне нужно включить / затем включить / присоединиться / выбрать / выбрать / выбрать коллекцию перед разделом "Новая ссылка", но я понятия не имею.
Есть ли способ архивировать это?