次の方法で共有


ConditionExpression クラスの使用

Microsoft Dataverse では、ConditionExpression クラスを使用して、"equal to" または "greater than" のような演算子を使用してテーブルの列を値または値のセットと比較できます。 ConditionExpression クラスは、条件式をパラメーターとして他のクラス (QueryExpressionFilterExpression など) に引き渡せるようにします。

ConditionExpression クラスを使用して条件を作成する際に設定できるプロパティを次の表に示します。

プロパティ 内容
AttributeName 条件式の列の論理名を指定します。
Operator 条件演算子を指定します。 これは、ConditionOperator 列挙体を使用して設定します。
Values 列の値を指定します。

AddCondition(ConditionExpression) メソッド (または ConditionExpression のコンストラクター) を使用するときは、配列が複数の値として追加されるか、配列として追加されるかをよく理解したうえで、作業を行ってください。

次のコードは、配列の使い方によって結果が異なる例です。

string[] values = new string[] { "Value1", "Value2" };  
ConditionExpression c = new ConditionExpression("name", ConditionOperator.In, values);  
Console.WriteLine(c.Values.Count); //This will output 2   
string[] values = new string[] { "Value1", "Value2" }object value = values;  
ConditionExpression c = new ConditionExpression("name", ConditionOperator.In, value);  
Console.WriteLine(c.Values.Count); //This will output 1  
  

希望する動作に応じて、object[]object に型を変換しなければならない場合があります。

列の値を状態コードなどの列挙型と比較する条件を作成する場合は、ToString メソッドを使って値を文字列に変換する必要があります。

例: ConditionExpression クラスの使用

次のコード例は、ConditionExpression クラスの使用方法を示しています。

  
//  Query using ConditionExpression    
ConditionExpression condition1 = new ConditionExpression();  
condition1.AttributeName = "lastname";    
condition1.Operator = ConditionOperator.Equal;    
condition1.Values.Add("Brown");                    
FilterExpression filter1 = new FilterExpression();    
filter1.Conditions.Add(condition1);    
QueryExpression query = new QueryExpression("contact");    
query.ColumnSet.AddColumns("firstname", "lastname");    
query.Criteria.AddFilter(filter1);    
EntityCollection result1 = _serviceProxy.RetrieveMultiple(query);    
Console.WriteLine();    
Console.WriteLine("Query using Query Expression with ConditionExpression and FilterExpression");    
Console.WriteLine("---------------------------------------");    
foreach (var a in result1.Entities)    
{  
      Console.WriteLine("Name: " + a.Attributes["firstname"] + " " + a.Attributes["lastname"]);    
}    
Console.WriteLine("---------------------------------------");  

例: 非アクティブ状態のテスト

次のコード例は、ConditionExpression クラスを使用して非アクティブ状態をテストする方法を示しています。

  
ConditionExpression condition3 = new ConditionExpression();  
condition3.AttributeName = "statecode";  
condition3.Operator = ConditionOperator.Equal;  
condition3.Values.Add(AccountState.Active);  
  

列の比較

次の例は、ConditionExpression クラスを使用して列を比較する方法を示しています。

public static EntityCollection ColumnComparisonExample(IOrganizationService service)
{
    QueryExpression query = new("contact")
    {
        Criteria = new FilterExpression(LogicalOperator.And)
        {
            Conditions = {
                {
                    new ConditionExpression(){
                        AttributeName = "firstname",
                        Operator = ConditionOperator.Equal,
                        CompareColumns = true,
                        Values = {
                            {"lastname"}
                        }
                    }
                }
            }
        }
    };
    return service.RetrieveMultiple(query);
}

trueCompareColumns プロパティ の値として渡すことで、valueattributeName の値を比較するための 2 番目の列の名前として扱われます。 既定値は False です。

オプション compareColumns ConditionExpression コンストラクターを使用して、このプロパティを設定することもできます。 次の例では、姓と名が同じであるレコードのみを返す条件を作成します、

var expression = new ConditionExpression(
    attributeName: "firstname",
    conditionOperator: ConditionOperator.Equal,
    compareColumns: true,
    value: "lastname");

compareColumns パラメーターを省き、名が John であるレコードのみを返す条件を作成します。

var expression = new ConditionExpression(
    attributeName: "firstname",
    conditionOperator: ConditionOperator.Equal,
    value: "John");

文字列値を使用する条件でワイルドカード文字を使用する

文字列値の条件を使用してクエリを作成する場合は、ワイルドカード文字を使用できます。 詳細: 文字列値の条件でワイルドカード文字を使用する

関連情報

クエリの作成
QueryExpression でクエリを作成する
FilterExpression クラスの使用
ConditionExpression

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。