1

Microsoft は、QueryExpression の複数の条件を作成するために、以下にコピーしたような例を提供しています。不明な数の条件を動的に処理できるように QueryExpression を構築する方法はありますか? 以下の Microsoft の例では、条件 1、条件 2 などを使用しています...繰り返しますが、可変数の条件を処理できる、より再利用可能な QueryExpression を作成する方法があるかどうか疑問に思っています。すべてがLINQで実行できることは知っていますが、QueryExpressionで実行できるかどうかを具体的に判断しようとしています。

// Create the query expression and set the entity to contact.
QueryExpression query = new QueryExpression();
query.EntityName = "contact";

// Create a condition where the first name equals Joe.
ConditionExpression condition1 = new ConditionExpression();
condition1.AttributeName = "firstname";
condition1.Operator = ConditionOperator.Equal;
condition1.Values = new string[] { "Joe" }; 

// Create another condition where the first name equals John.
ConditionExpression condition2 = new ConditionExpression();
condition2 .AttributeName = "firstname";
condition2 .Operator = ConditionOperator.Equal;
condition2 .Values = new string[] { "John" }; 
4

3 に答える 3

2

そのため、プログラムで QueryExpressions を構築でき、オブジェクトの作成を合理化するのに役立つ場合があります。私が提起する唯一の問題は、クエリが非常に異なるため、それらすべてをサポートする汎用関数を作成するのが難しい場合があることです。

いずれにせよ、ここに簡単な例があります。

    public static QueryExpression BuildQueryExpression(String entityName, ColumnSet columnSet, LogicalOperator logicalOperator, List<ConditionExpression> conditions)
    {
        QueryExpression query = new QueryExpression(entityName);
        query.ColumnSet = columnSet;
        query.Criteria = new FilterExpression(logicalOperator);
        conditions.ForEach(c => query.Criteria.AddCondition(c));
        return query;
    }

使用法:

    QueryExpression query = BuildQueryExpression("contact", new ColumnSet(true), LogicalOperator.And, new List<ConditionExpression>()
        {
            new ConditionExpression("firstname", ConditionOperator.Equal, "James" ),
            new ConditionExpression("lastname", ConditionOperator.Equal, "Wood" ),
        });
于 2012-09-26T20:14:25.653 に答える
0

LinqKit の PredicateBuilder は、この種の問題を管理するための一連のクリーンな拡張機能を提供します。

于 2014-04-18T16:42:38.700 に答える