次の方法で共有


QueryExpression を使用してデータを照会する

QueryExpression クラスは、Microsoft.Xrm.Sdk.Query 名前空間の他のクラスと共に、IOrganizationService.RetrieveMultiple メソッドを使用して Dataverse からレコードを取得する複雑なクエリを作成するオブジェクト モデルを提供します。 SDK for .NET を使用してデータをクエリする際のオプションを比較する

クエリを作成する

QueryExpressionを使用して動的クエリを作成し、FetchXml の使用時に文字列または XML 操作を必要とせずに変更できます。

すべてのクエリは単一のテーブルに基づいています。 QueryExpression クラスを使用して、クエリがデータを取得するテーブルを選択します。

オブジェクト初期化スタイル

次の例は、QueryExpression クエリを表しており、オブジェクト初期化子を使用して、Account テーブルの最初の5行のName列を返すように単一の割り当てでクエリが定義されます。

public static EntityCollection SimpleExample(IOrganizationService service) {

   QueryExpression query = new("account")
   {
         ColumnSet = new ColumnSet("name"),
         TopCount = 5
   };

   return service.RetrieveMultiple(query);
}

クエリ インスタンスを初期化すると、次のことができます。

プロパティ割り当てスタイル

QueryExpression(String) コンストラクターまたはオブジェクト初期化スタイルを使用せずに、同じクエリを作成できます。 次の例に示すように、インスタンス化されたインスタンスのプロパティを設定するだけです。

public static EntityCollection SimpleExample(IOrganizationService service)
{

   QueryExpression query = new();
   query.EntityName = "account";
   query.ColumnSet.AddColumn("name");
   query.TopCount = 5;

   return service.RetrieveMultiple(query);
}

このサンプルは、次の操作方法を示します。

このドキュメントの例では、オブジェクトの初期化とプロパティの割り当てスタイルの組み合わせを使用します。 クエリが複雑になるにつれて、オブジェクトの初期化スタイルが扱いにくくなる可能性があります。 クエリ プロパティをいつでも個別に定義し、プロパティを設定するか、使用可能な算出方法を使用してクエリに追加できます。

行数の制限

返される行数を制限するには、QueryExpression.TopCount プロパティを使用します。 TopCount プロパティを設定しない場合、Dataverse は標準テーブルの場合は最大 5,000 行、エラスティック テーブルの場合は 500 行を返します。

または、ページングを使用して返すレコードの数を指定します。 データのページを要求するときは、TopCount プロパティを使用しないでください。 ページングされた結果を要求する方法について説明します。

TopCount プロパティを使用して行数を要求する場合は、 プロパティを使用できません。 行をカウントする方法について説明します

明確な結果を返します

クエリの結果に重複する値が含まれないようにするには、QueryExpression.Distinct プロパティ を使用します。

Distinct プロパティを使用する場合は、ページングの一貫性を保つために、少なくとも 1 つの OrderExpressionQueryExpression.Orders プロパティ に追加する必要があります。

Distinct プロパティを使用すると、返される結果に各レコードの主キー値は含まれません。これは、主キー値がすべての個別の値の集計を表すためです。

データの取得

SDK for .NET を使用したクエリ データの説明に従って、QueryExpressionQueryBase クラスから派生した 3 種類のうちの 1 つです。 これを IOrganizationService.RetrieveMultiple メソッドに渡して、結果を含むEntityCollectionを取得できます。

EntityCollection results = service.RetrieveMultiple(query);

ヒント

QueryExpression サンプル コード を使って、この算出方法を使用してみてください。

RetrieveMultipleRequest クラスを使用して、クエリを RetrieveMultipleRequest.Query プロパティに設定することもできます。 次に、 IOrganizationService.Execute メソッドを使用して要求を送信します。

RetrieveMultipleRequest request = new()
{
      Query = query
};
var response = (RetrieveMultipleResponse)service.Execute(request);

EntityCollection results = response.EntityCollection;

次のような場合、RetrieveMultipleRequest クラス を使用します。

クエリを絞り込む

クエリを開始するテーブルを選択した後、クエリを調整して必要なデータを取得します。 次の記事では、クエリを完了する方法について説明します。

記事 タスク
列を選択する 返すデータの列を指定します。
テーブルの結合 結果としてどの関連テーブルを返すかを指定します。
行を順序付ける 返す行の並べ替え順を指定します。
行をフィルターする 返すデータの行を指定します。
ページの結果 各リクエストで返すデータの行数を指定します。
データの集計 返されたデータのグループ化と集計を行う方法。
行数をカウントする 返された行数を取得する方法。
パフォーマンスの最適化 パフォーマンスを最適化する方法。

制限

FetchXml は、QueryExpression がサポートしていないいくつかの機能をサポートしています。

重要

SDK FetchXmlToQueryExpressionまたは Web API FetchXmlToQueryExpression 関数 メッセージを使用する場合、QueryExpressionがサポートしていない機能は適用されず、エラーは発生しません。

コミュニティ ツール

XrmToolBoxFetchXMLBuilder は、FetchXml 要求を作成してテストするための無料のツールです。 また、同じデザイナー エクスペリエンスを使用して QueryExpression クエリのコードも生成します。

注意

Microsoft では、コミュニティによって作成されたツールはサポートされていません。 コミュニティ ツールに関する質問や問題は、ツールの公開元にお問い合わせください。

QueryExpression をメッセージ パラメーターとして使用する

次のメッセージなど、dataverse 操作のパラメーターとして QueryExpression を使用することもできます。

メッセージ名 .NET用SDKのリクエストクラス Web API 操作
BackgroundSendEmail BackgroundSendEmailRequest BackgroundSendEmail アクション
BulkDetectDuplicates BulkDetectDuplicatesRequest(一括重複検出リクエスト) BulkDetectDuplicates アクション
BulkDelete BulkDeleteRequest BulkDelete アクション
FullTextSearchKnowledgeArticle FullTextSearchKnowledgeArticleRequest FullTextSearchKnowledgeArticle アクション
QueryExpressionToFetchXml QueryExpressionToFetchXmlRequest QueryExpressionToFetchXml アクション
SendBulkMail SendBulkMailRequest SendBulkMail アクション
SyncBulkOperation SyncBulkOperationRequest SyncBulkOperation アクション
Rollup RollupRequest ロールアップ機能

注意

BulkDeleteSyncBulkOperationQueryExpressionToFetchXml アクション以外の Web API 操作では、FetchExpression 複合型を介して FetchXml を使用できます。 Web API には、QueryExpressionColumnSetFilterExpression 複合型などのを使用してクエリを作成するための構造が含まれていますが、現時点では、QueryExpressionに、Web API を使用してを使用してこれらの構造体を使用してデータを取得する方法はありません。 この制限は、Web API を使用してパラメーターとして送信するクエリの結果をテストできないことを意味します。

次の手順

列を選択する方法について説明します。

いくつかのクエリを試してください。