1. WebクライアントSDK

LINQクエリ

日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

このセクションでは、Sitecore Content Hubで特定のエンティティを検索するクエリを作成する方法について説明します。

クエリ オブジェクト自体はクエリを実行しませんが、クエリの条件を記述します。 クエリを実行するクライアントは 、クエリの実行を担当します。

最初に、Sitecore Content HubでのLINQクエリのオプションと構造について説明し、最後にいくつかの例を示します。

LINQの使用を開始する

クエリを作成するには、LINQを使用することをお勧めします。LINQに詳しくない場合は、LINQをご覧くださいhttps://learn.microsoft.com/en-us/dotnet/csharp/linq/get-started/introduction-to-linq-queries

LINQクエリを完全に使用するには、次のusingがあることを確認してください。

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クエリでサポートされています。

システム・プロパティ

  • 同上 (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);

システム・プロパティ

システム・プロパティーのデータ・タイプに応じて、以下のようになります。

  • 長い: ==, !=

  • 文字列: ==, !=

  • 日時: ==,!=,>,<,>=,<=

たとえば、指定した日付より後に変更されたエンティティをフィルタリングするには、次のようにします。

var query = Query.CreateQuery(entities => 
  from e in entities
  where e.ModifiedOn  dateTime
  select e);

エンティティメンバー

  • プロパティ値 (特定のカルチャの値のフィルター処理もサポート)

  • リレーション( parent IDでのみフィルタリング可能)

たとえば、プロパティ値でフィルタリングするには、次のようにします。

var query = Query.CreateQuery(entities => 
  from e in entities
  where e.Property("Title") == "Logo"
  select e);

サポートされている比較演算子

次の比較演算子は、LINQクエリでサポートされています。

プロパティ

プロパティのデータタイプに応じて、次のようになります。

  • 文字列: ==, !=

  • int: ==, !=, >, <, >=, <=

  • 長: ==!=><>=<=

  • 10進数: ==!=><>=<=

  • ブール: ==, !=

  • 日時: ==, !=, <, >, >=, <=

  • DateTimeOffset: ==, !=, >, <, >=, <=

たとえば、タイトルが「Logo」でないエンティティをフィルタリングするには、次のようにします。

var query = Query.CreateQuery(entities => 
  from e in entities
  where e.Property("Title") != "Logo"
  select e);

追加のプロパティフィルター

エンティティに対する次のプロパティ フィルターは、LINQクエリでもサポートされています。

「in」フィルター

Inフィルターを使用すると、コレクションまたはコンマ区切り値を指定できるため、1つの値ではなく複数の値をフィルタリングできます。

Inフィルターは、次の場所でサポートされています。

  • エンティティID

  • エンティティ識別子

  • プロパティ値

  • リレーション値 (親IDのみ)

タイトルが「Logo」または「Poster」に設定されているエンティティを見つけましょう。

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);

By変更日

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);

プロパティ値別

プロパティTitleが「Logo」に設定されているすべてのエンティティを検索します。

var query = Query.CreateQuery(entities => 
  from e in entities
  where e.Property("Title") == "Logo"
  select e);

特定の文化における資産価値別

プロパティDescriptionが英語のカルチャで "Hello world!" に設定されているすべてのエンティティを検索します。

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));
この記事を改善するための提案がある場合は、 お知らせください!