LINQクエリ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このセクションでは、Sitecore Content Hubで特定のエンティティを探すためのクエリを作成する方法について説明します。クエリオブジェクト自体はクエリを実行しませんが、クエリの条件を記述します。クエリを実行する責任はクエリクライアントです。
LINQを始めましょう
クエリを作成する推奨される方法はLINQを使うことです。LINQに馴染みがなければ、https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/get-started-with-linqをご覧ください。
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);
エンティティメンバー
- プロパティバリュー(特定の文化における価値のフィルタリングもサポート)
- リレーションシップ( 親 IDのみでフィルタリング可能)
例えば、プロパティ値でフィルタリングする場合:
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title") == "Logo" select e);
!注LINQクエリには さまざまな演算子 を使うことができます。
システム特性
システムプロパティのデータ型に応じて:
- 長文: ==, !=
- string: ==, !=
- デートタイム: ==、 !=、 >、 <、 >=、 <=
例えば、指定された日付以降に修正されたエンティティをフィルタリングするには:
var query = Query.CreateQuery(entities => from e in entities where e.ModifiedOn > dateTime select e);
性質
プロパティデータ型によって異なります:
- string: ==, !=
- int: ==, !=, >, <, >=, <=
- 長: ==、 !=、 >、 <、 >=、 <=
- 小数点: ==、 !=、 >、 <、 >=、 <=
- Bool: ==!=
- デートタイム: ==、 !=、 >、 <、 >=、 <=
- DateTimeOffset: ==, !=, >, <, >=, <=
例えば、タイトルが「Logo」でないエンティティをフィルタリングする:
var query = Query.CreateQuery(entities => from e in entities where e.Property("Title") != "Logo" select e);
追加のプロパティフィルター
「イン」フィルター
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条項のサポートはロード操作と設定操作のみです。
装填オプションと構成
以下の選択されたオプションがサポートされています:
- 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つのエンティティ)をスキップし、次の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);
より高度なクエリ
以下のクエリは、タイトルがLogoのM.Demo.Userによって作成された最後の10個のアセットを取得します。
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));