Ich bin neu bei Linq, also appologise für die lange Frage.Complex Linq Abfrage mit Artikeln, Kategorien und Versionierung
Ich habe ein CMS mit Artikeln, Kategorien und Versionierung. Kategorien sind hierarchisch (d. H. Kategorie hat eine ParentID) und wir verwenden sie auf eine etwas komplizierte Art und Weise.
Die Datenstruktur ist wie folgt:
Kategorie 1 mit all ihren Unterkategorien (und Sub-Sub-Kategorien) sind Domains betrachtet.
Kategorie 2 mit all seinen Unterkategorien werden betrachtet Wissenstypen.
Artikel werden erstellt und mit 'n +' Domains und Sub (sub) -Domains sowie 'n +' Knowledge Types assoziiert.
Beispiel:
Artikel Titel - "Jugendentwicklung"
Domain - Entwicklung
Sub-Domain - Jugend
Sub-Sub-Domain - Minderjährige
Wissen Typ - Best Practice
Was ich tun muss:
1. Zuerst eine Liste der neuesten Version Kunst extrahieren isel nach einer bestimmten Domäne gefiltert
2. Geben Sie eine Liste der Artikel zurück, die nach Wissenstyp gruppiert sind
Aufgrund der Komplexität der Tabellenstrukturen, dh mehrere Tabellen für Artikel (und Versionen), Kategorien und Artikel zu Kategorie (Versionen) Ich finde es schwierig, eine einzige Linq-Abfrage zu erstellen, um dies zu tun.
Hier ist eine Abfrage nur die neueste Version Artikel zu erhalten:
var articleGroups = from article in _Context.Articles
join articleVersion in _Context.ArticleVersions
on article.ArticleID equals articleVersion.ArticleID
join articleCategoryVersion in _Context.ArticlesCategoriesVersions
on articleVersion.ArticleID equals articleCategoryVersion.ArticleID
where articleCategoryVersion.CategoryID == 36
join articleCategory in _Context.ArticleCategories
on articleCategoryVersion.CategoryID equals articleCategory.CategoryID
group articleVersion by article.ArticleID into articleGroup
select articleGroup.OrderByDescending(x => x.Version).First() into articleOut
select new
{
ArticleID = articleOut.ArticleID,
ArticleVersion = articleOut.Version,
Title = articleOut.Title
};
Ich erhalte 1 SQL-Abfrage (bei Profiler), das ist toll! Ich bekomme die Artikel mit Domain 36 gut verbunden.
Die Abfrage sieht jedoch gewunden aus?
Jetzt muss ich nur irgendwie die resultierenden Artikel nehmen, sie mit Wissenstypen verbinden und sie gruppieren, so dass ich eine Liste von Artikeln auf einer Website nach Wissenstyp gruppiert anzeigen kann.
Sie sollten Navigationseigenschaften wie 'Article.ArticleVersions' verwenden. –