LINQクエリ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このセクションでは、Sitecore Content Hubで特定のエンティティを探すためのクエリ作成方法を説明します。
クエリオブジェクト自体はクエリを行いませんが、クエリの条件を記述します。 クエリクライアント はクエリの実行を担当します。
まず、Sitecore Content HubにおけるLINQクエリのオプションと構造について説明します。最後にいくつかの例を紹介します。
LINQを始めましょう
クエリを作成する推奨方法はLINQを使うことです。LINQに馴染みがなければ、https://learn.microsoft.com/en-us/dotnet/csharp/linq/get-started/introduction-to-linq-queriesを参照してください。
LINQクエリを完全に活用するには、以下の使い方を必ず用意してください。
using System.Linq; using Stylelabs.M.Base.Querying; using Stylelabs.M.Base.Querying.Linq;
テンプレート
LINQテンプレートは以下の通りです:
var query = Query.CreateQuery(entities => from e in entities where conditions orderby property ascending | descending select e);
where節の複数の条件は、&&を用いて連鎖できます。
orderby特定の(系)性質に基づいて結果を順序付けるために用いられます。これは上昇または下降のどちらかです。より複雑な順序付けには複数のorderby文を用いることができます。
サポートされているエンティティフィルター
LINQクエリには、エンティティに関する以下のフィルターがサポートされています。
システム特性
- id(long)
- 識別子(long)
- 定義
- ID(long)
- 名前(string)
- 作成者
- ユーザーID(long)
- ユーザー名(string)
- 修正者
- ユーザーID(long)
- ユーザー名(string)
- (DateTime年)で作成
- 修正済み(DateTime)
例えば、idでフィルタリングするには:
var query = Query.CreateQuery(entities => from e in entities where e.Id == entityId select e);
システム特性
システムプロパティのデータ型に応じて:
- 長文: ==, !=
- string: ==, !=
- デートタイム: ==、!=、>、<、>=、<=
例えば、指定された日付以降に修正されたエンティティをフィルタリングするには:
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedOn dateTime select e);
エンティティメンバー
- プロパティバリュー(特定の文化における価値のフィルタリングもサポート)
- リレーションシップ( 親 IDのみでフィルタリング可能)
例えば、プロパティ値でフィルタリングする場合:
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title") == "Logo" select e);
対応比較演算子
以下の比較演算子はLINQクエリに対応しています。
性質
プロパティデータ型によって異なります:
- string: ==, !=
- int: ==, !=, >, <, >=, <=
- 長: ==、 !=、 >、 <、 >=、 <=
- 小数点: ==、 !=、 >、 <、 >=、 <=
- Bool: ==!=
- デートタイム: ==、 !=、 <、 >、 >=、 <=
- DateTimeOffset: ==, !=, >, <, >=, <=
例えば、タイトルが「Logo」でないエンティティをフィルタリングする:
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title") != "Logo" select e);
追加のプロパティフィルター
以下のプロパティフィルターもLINQクエリでサポートされています。
「イン」フィルター
Inフィルターは、集合値やカンマ区切られた値を指定し、単一の値ではなく複数の値でフィルタリングすることを可能にします。
Inフィルターは以下の上でサポートされています:
- エンティティID
- エンティティ識別子
- 不動産価値
- リレーション値(親IDのみ)
タイトルが「ロゴ」または「ポスター」に設定されているエンティティを探してみましょう。
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title").In("Logo", "Poster") select e);
ストリングフィルター
文字列プロパティはいくつかの追加フィルターをサポートしています:
- Contains: 値は指定された部分文字列を含まなければなりません。
- StartsWith: 値は指定された部分文字列で始まらなければなりません。
- EndsWith: 値は指定された部分文字列で終わらなければなりません。
これらのフィルターは大文字を区別しません。
以下のクエリは、「logo」を含むTitleプロパティを持つすべてのエンティティを見つけるために使用できます。
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title").Contains("logo") select e);
支持される順序
順序付けは以下の場所でサポートされています:
- エンティティID
- エンティティ識別子
- 定義id
- 定義名称
- ユーザーIDによって作成されました
- ユーザー名で作成
- ユーザーIDによって修正されています
- ユーザー名によって修正されています
- 作成
- 改変
- 不動産価値
例えば、作成日にアセットを注文し、その後タイトル順に注文する場合:
var query = Query.CreateQuery(entities => from e in entities where e.DefinitionName == "M.Asset" orderby e.CreatedOn ascending orderby e.Property("Title") ascending select e);
オプション選択
現在、select条項のサポートはロードオプションと設定操作のみです。
装填オプションと構成
!警告バージョン3.1以降、これらの操作は廃止されました。読み込み設定とクエリオブジェクトは分離されており、該当する場合は別々のパラメータとして渡されるべきです。
以下の選択されたオプションがサポートされています:
- InCultures: は指定された文化内のエンティティを読み込みます
- WithProperties: はエンティティに指定されたプロパティをロードします
- WithRelations: はエンティティに指定された関係をロードします
- LoadConfiguration: 指定された負荷構成を持つエンティティをロードします
これらの選択オプションの複数を連鎖させることができます。最後の操作は該当する場合、前の操作を上書きします。
この例では、デフォルトのクエリロード設定(デフォルトカルチャー、すべてのプロパティをロードし、関係なし)からAssetTypeToAssetリレーションを追加します。 WithRelationsは先ほどのロード設定セットのリレーションロードオプションを上書きします。
var query = Query.CreateQuery(entities => from e in entities where conditions select e.LoadConfiguration(QueryLoadConfiguration.Default) .WithRelations(new RelationLoadOption("AssetTypeToAsset")));
!注詳細は ロード構成をご覧ください。
結果演算子
skip (最初のx個のエンティティをスキップする)およびtake (x個エンティティを返す)もLINQ使用時にサポートされています。
var query = Query.CreateQuery(entities => (from e in entities where YOUR CONDITIONS select e) .Skip(5) .Take(5));
これにより、idの下位に並べられ、最初の5つのエンティティは飛ばし、次の5つのエンティティを返します。
例
以下は例の一覧です。これらの例のほとんどは非常にシンプルで自明です。例は終盤に向かってより複雑になる傾向があります。
idによって
var query = Query.CreateQuery(entities => from e in entities where e.Id == entityId select e);
識別子別
var query = Query.CreateQuery(entities => from e in entities where e.Identifier == entityIdentifier select e);
定義上、id
var query = Query.CreateQuery(entities => from e in entities where e.DefinitionId == definitionId select e);
定義上の名前
var query = Query.CreateQuery(entities => from e in entities where e.DefinitionName == "M.Asset" select e);
ユーザーIDによって作成されました
var query = Query.CreateQuery(entities => from e in entities where e.CreatedById == demoUserId select e);
ユーザー名によって作成されました
var query = Query.CreateQuery(entities => from e in entities where e.CreatedByUsername == "M.Demo.User" select e);
ユーザーIDによる修正による
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedById == demoUserId select e);
ユーザー名によって修正されました
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedByUsername == "M.Demo.User" select e);
作成者による
var query = Query.CreateQuery(entities => from e in entities where e.CreatedOn == dateTime select e);
また、2つの日付間で可能な場合もあります:
var query = Query.CreateQuery(entities => from e in entities where e.CreatedOn minDateTime && e.CreatedOn maxDateTime select e);
修正による
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedOn == dateTime select e);
また、2つの日付間で可能な場合もあります:
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedOn minDateTime && e.ModifiedOn maxDateTime select e);
財産価値による
「Logo」に設定されたプロパティTitleを持つすべてのエンティティを見つけます。
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title") == "Logo" select e);
特定の文化における財産価値別
英語文化において「Hello world!」に設定されたプロパティDescriptionを持つすべてのエンティティを見つけます。
CultureInfo enUs = CultureInfo.GetCultureInfo("en-US"); var query = Query.CreateQuery(entities => from e in entities where e.Property("Description", enUs) == "Hello world!" select e);
関係による親値
親プロパティはエンティティオブジェクト上でアクセスし、指定されたリレーションについてクエリすることができます。リレーションにクエリするには、リレーション名と親IDを指定する必要があります。
var query = Query.CreateQuery(entities => from e in entities where e.Parent("AssetTypeToAsset") == assetTypeId select e);
より高度なクエリ
以下のクエリは「M.Demo.User」によって作成された最後の10つのアセットを取得し、タイトルは「Logo」です。
var query = Query.CreateQuery(entities => (from e in entities where e.DefinitionName == "M.Asset" && e.Property("Title") == "Logo" && e.CreatedByUsername == "M.Demo.User" orderby e.CreatedOn descending select e) .Take(10));