Orchard CMS(バージョン1.8)を使用してバックエンド用に構築しているモジュールのコードにコンテンツのクエリを作成しています。オーチャードCMS IContentQueryサブクエリ?
私は特定の文化に翻訳されていないコンテンツを取得しようとしています。
SQLクエリを作成し、Microsoft SQL Server Management Studioでテストできました。
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
)
)
私はイタリア語で翻訳されていないフランスの内容を見つけられないだろう、これが唯一のマスター培養物から未翻訳の文化を発見し理解し、そして、例えば、マスター文化としてEN-US与えられていないでしょう。私は後でそれを改善することができます。
IContentQueryを使用してこれを実装する方法がわかりません。この機能は、このような機能が大規模なモジュールの一部であり、そのようなクエリが既に構築されているため使用する必要があります。
私はQueryOverを使用してこのクエリを作成できますが、すでに存在するすべてのレガシーコードを変更しないでください。
これはどのようにIContentQueryを使って実装できるのか説明できますか?
私がここで役に立つ情報を忘れた場合はお知らせください。
この方法は機能し、基本的に私がすでに実装したものです。私は私の質問で明確ではないことをお詫びしなければならない:クエリは、私の場合、IEnumerableにすべてを配置し、Linqでそれをフィルタリングするために私に多すぎるcontentItemsを返す可能性があります。私はIContentQueryにこの "フィルタ"を直接挿入する方法があるのだろうかと思っていました。 – Bovaz
ああ大丈夫、それは理にかなっている。オーチャードのよくある問題は、コンテンツのクエリが非常に遅くなり、超洗練された洗練されたソリューションがないことがわかっている限りです。あなたが冒険的な気がするなら、NHibernateを通してオーチャードテーブルに直接問い合わせることができます。これを見てください:http://weblogs.asp.net/bleroy/querying-orchard-in-hql – Lawyerson
こんにちは、私はNHibernate、HQL、またはQueryOverを使って結果を得ることができます。しかし、それは私がフォームの内容(私がIContentQueryで行うすべてのもの)に基づいて大きなクエリを作成する、この機能が動作しなければならないすべてのコードを変更して変更することを強いるので、私はしたくありません。私はIContentQuery以外のものを使う度に少し心配しています。異なるバージョンのOrchardではテーブルをわずかに変更して、私のカスタムクエリをすべて確認することが恐れるからです。 – Bovaz