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

我知道这是一个老问题,但我终于找到了编写 QueryExpression 的优雅方式,并且认为与社区分享会很好。

相同的查询可以这样写:

    FilterExpression _filter = new FilterExpression(LogicalOperator.And);
    _filter.AddCondition("firstname", ConditionOperator.Equal, "Joe");
    _filter.AddCondition("firstname", ConditionOperator.Equal, "John");

    dynamic _queryExpression = new QueryExpression {
EntityName = Contact.EntityLogicalName,
ColumnSet = new ColumnSet(true),
Criteria = _filter
    };
于 2014-04-18T14:43:42.610 回答
0

LinqKit 的 PredicateBuilder 提供了一组干净的扩展来管理此类问题。

于 2014-04-18T16:42:38.700 回答