FilterExpression クラスの使用
Microsoft Dataverse では、FilterExpression クラスを使用して、複数の条件を表すクエリを作成できます。 たとえば、([FirstName] = 'Joe' OR [FirstName] = 'John') AND [City] = 'Redmond'
のような SQL ステートメントと同等のクエリ式を作成できます。
次の表では、FilterExpression クラスのプロパティを示します。
プロパティ | 内容 |
---|---|
Conditions | テーブルの列、条件演算子、および列の値を含む条件式を取得または設定します。 |
FilterOperator | 論理 AND/OR フィルター演算子を取得または設定します。 これは、LogicalOperator 列挙体を使用して設定します。 |
Filters | クエリの結果をフィルターする条件式および論理フィルター式の階層を取得または設定します。 |
IsQuickFindFilter | 式が簡易検索クエリの一部であるかどうかを示す値を取得または設定します。 |
FilterExpression クラスには、クエリの作成が簡単になる複数のヘルパー メソッドも含まれます。 FilterExpression.ConditionExpression メソッドを使用すると ConditionExpression が FilterExpression の Conditions プロパティに追加され、条件式の作成に必要なコードが減ります。 AddFilter.LogicalOperator メソッドは、新しいフィルターを FilterExpression クラスの Filters プロパティに追加します。
フィルター式の例
次のコード例は、FilterExpression クラスの使用方法を示しています。
QueryExpression query = new QueryExpression("contact");
query.ColumnSet.AddColumns("firstname", "lastname", "address1_city");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("address1_city", ConditionOperator.Equal, "Redmond");
FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.Or);
childFilter.AddCondition("lastname", ConditionOperator.Equal, "Tharpe");
childFilter.AddCondition("lastname", ConditionOperator.Equal, "Brown");
// Pass query to service proxy
EntityCollection results = _serviceProxy.RetrieveMultiple(query);
Console.WriteLine();
Console.WriteLine("Query using QE with multiple conditions and filters");
Console.WriteLine("---------------------------------------");
// Print results
foreach (var a in results.Entities)
{
Console.WriteLine("Name: {0} {1}", a.GetAttributeValue<string>("firstname"), a.GetAttributeValue<string>("lastname"));
Console.WriteLine("City: {0}", a.GetAttributeValue<string>("address1_city"));
}
Console.WriteLine("---------------------------------------");
IsQuickFindFilter プロパティについて
FilterExpression.IsQuickFindFilter プロパティ、それは Fetch XML の filter
ノードに存在する isquickfindfields
列のようなものです。 Fetch クエリが保存されると、これは SavedQuery
と UserQuery
テーブルの IsQuickFind
プロパティに保存されます。 IsQuickFindFilter プロパティは、クエリ式と Fetch XML クエリとの間に一貫性があるように追加されました。
IsQuickFindFilter プロパティには次のルールが適用されます。
このフィールドを
true
に設定できるのは、論理演算子の種類が LogicalOperator.Or
のフィルター式に対してのみです。 論理演算子の種類が LogicalOperator.And
のフィルター式に対して設定しても、IsQuickFindFilter プロパティは無視されます。フィルター式階層内の 1 つのフィルター式に対してのみ、IsQuickFindFilter = true を設定できます。 複数のフィルター式が見つかった場合は、例外がスローされます。
フィルター式で IsQuickFindFilter を true に設定している場合、子フィルター式のプロパティを追加することはできません。追加できるのは ConditionExpression のプロパティのみです。 子フィルター式を追加した場合は、例外がスローされます。
IsQuickFindFilter を true に設定しているフィルター式に関連するすべての条件式は、null 以外の 1 つの値を返す条件式であることが必要です。 つまり、条件が列、演算子、および値で構成されている場合、value プロパティが null でない単一の値である条件のみがサポートされます。 さらに、これらの条件式でサポートされる条件演算子は、null 以外の 1 つの値を返す演算子のみです。 null 値または複数の値が検出された場合は、例外がスローされます。
関連項目
QueryExpression でクエリを作成する
左外部結合を QueryExpression で使用して "存在しない" 記録をクエリする
ConditionExpression クラスの使用
FilterExpression
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。