QueryExpression查询中的OR写法

CRM当中的查询一般会采用两种方式,QueryExpression查询和FetchXML查询。一般用的比较多的是QueryExpression,但是由于QueryExpression种or写法不太熟练,所以当碰到这种有or逻辑查询的时候,我都会直接去系统高级查询中构建一个查询,然后将FetchXML下载下来,copy到代码中,这样不容易出错且简单。

但是QueryExpression的OR查询还是要掌握一下:
查询逻辑:(客户类型为10并且客户行业为10)或者(客户类型不等于10)

QueryExpression query = new QueryExpression("Account");
query.ColumnSet = new ColumnSet(true);
query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);
FilterExpression FilterOr = new FilterExpression
{
   FilterOperator = LogicalOperator.Or,
   Filters =
   {
      new FilterExpression
      {
         FilterOperator = LogicalOperator.And,
         Conditions =
         {
            new ConditionExpression("new_accounttype",ConditionOperator.Equal,10),
            new ConditionExpression("new_accountindustry",ConditionOperator.Equal,10)
         }
      },
      new FilterExpression
      {
        FilterOperator=LogicalOperator.And,
        Conditions =
        {
           new ConditionExpression("new_accounttype",ConditionOperator.NotEqual,10),
        }
      }
  }
};
query.Criteria.Filters.Add(FilterOr);

EntityCollection result = AdminService.RetrieveMultiple(query);

通过上述代码可以看出,当涉及到OR查询时一般会采用FilterExpression来完成。

备注:当有多个OR查询的时候,就构造多个FilterExpression,然后在最后的add时会有一些差异

query.Criteria.Filters.AddRange(new List<FilterExpression>() { FilterAnd, FilterOr, FilterOrNew });
posted @ 2019-11-19 14:20  倒不了的西恩塔  阅读(2092)  评论(0编辑  收藏  举报