Ich baue eine Abfrage für Inhalte in den Code eines Moduls, das ich für ein Back-End mit Orchard CMS (Version 1.8) erstellen.Orchard CMS IContentQuery Unterabfragen?
Ich versuche Inhalte zu erhalten, die keine Übersetzung in eine bestimmte Kultur haben.
Ich konnte eine SQL-Abfrage schreiben und es in Microsoft SQL Server Management Studio testen.
SELECT [Id]
,[CultureId]
,[MasterContentItemId]
FROM [Orchard_MyTenant].[dbo].[Orchard_Localization_LocalizationPartRecord]
WHERE [CultureId] != 1
AND [Id] NOT IN (
SELECT [MasterContentItemId]
FROM [Orchard_MyTenant].[dbo].[Orchard_Localization_LocalizationPartRecord]
WHERE [Id] IN (
SELECT [Id]
FROM [Orchard_FestivalTV].[dbo].[Orchard_Localization_LocalizationPartRecord]
WHERE [CultureId] = 1
)
)
Ich verstehe das nur die nicht übersetzten Kulturen aus der Master-Kultur findet, und nicht zum Beispiel en-US als Master-Kultur gegeben, würde Französisch Inhalt nicht finden, die in italienischer Sprache nicht übersetzt werden. Ich kann diese Verbesserung später machen.
Ich habe keine Ahnung, wie dies mit IContentQuery zu implementieren, und ich muss diese verwenden, da diese Funktionalität ein Teil eines größeren Moduls wäre, wo die Abfrage bereits so aufgebaut ist.
Ich bin in der Lage, diese Abfrage mit QueryOver zu machen, aber ich möchte lieber nicht gehen und ändern Sie alle Legacy-Code, der bereits vorhanden ist.
Kann jemand erklären, wie dies mit IContentQuery implementiert werden könnte?
Lassen Sie mich wissen, wenn ich hier nützliche Informationen vergessen habe.
Diese Methode funktioniert, und ist im Grunde, was ich bereits implementiert hatte. Ich muss mich dafür entschuldigen, dass ich in meiner Frage nicht klar bin: Die Abfrage kann in meinem Fall viel zu viele contentItems zurückgeben, als dass ich alles in ein IEnumerable schreiben und dann mit Linq filtern möchte. Ich habe mich gefragt, ob es eine Möglichkeit gibt, diesen "Filter" direkt in IContentQuery einzufügen. – Bovaz
Oh okay, das macht Sinn. Es ist ein häufiges Problem mit Orchard, dass Inhaltsabfragen sehr langsam werden können, und soweit ich weiß, gibt es keine besonders elegante Lösung. Wenn Sie abenteuerlustig sind, können Sie die Orchard-Tabellen direkt über NHibernate abfragen. Werfen Sie einen Blick auf diese: http://weblogs.asp.net/bleroy/querying-orchard-in-hql – Lawyerson
Hallo, ich kann die Ergebnisse von usng NHibernate, HQL oder QueryOver erhalten.Das möchte ich aber nicht, denn das würde mich zwingen, den ganzen Code zu ändern, mit dem diese Funktion arbeiten soll, wo ich eine große Abfrage basierend auf dem Inhalt eines Formulars erstelle (alles andere, was ich mit IContentQuery mache). Ich bin auch etwas besorgt, wenn ich etwas anderes als IContentQuery verwende, weil ich befürchte, dass sie in verschiedenen Versionen von Orchard die Tabellen leicht ändern und mich zwingen, alle meine benutzerdefinierten Abfragen zu überprüfen. – Bovaz