使用 FilterExpression 类

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

在 Microsoft Dynamics 365 和 Microsoft Dynamics 365 (online) 中,可以使用 FilterExpression 类生成表示多个条件的查询。 例如,可以创建等效于 SQL 语句(如 ([FirstName] = 'Joe' OR [FirstName] = 'John') AND [City] = 'Redmond')的查询表达式。

下表列出了 FilterExpression 类的属性。

属性

说明

Conditions

获取或设置包括属性、条件运算符和属性值的条件表达式。

FilterOperator

获取或设置逻辑 AND/OR 筛选器运算符。 它是使用 LogicalOperator 枚举设置的。

Filters

获取或设置用于筛选查询结果的条件和逻辑筛选器表达式的层次结构。

IsQuickFindFilter

获取或设置指示表达式是否为“快速查找”查询一部分的值。

FilterExpression 类还包含一些帮助程序方法,通过它们可以更轻松地创建查询。AddCondition 方法可将 ConditionExpression 添加到 FilterExpressionConditions 属性中,以减少构造条件表达式所需的代码量。AddFilter 方法可将新筛选器添加到 FilterExpression 类的 Filters 属性中。

本主题内容

筛选器表达式示例

关于 IsQuickFindFilter 属性

筛选器表达式示例

以下代码示例演示如何使用 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 查询后,它将存储在 SavedQueryUserQuery 实体的 IsQuickFind 属性中。 添加 IsQuickFindFilter 属性的目的是为了在查询表达式和 Fetch XML 查询之间提供一致性。

下列规则适用于 IsQuickFindFilter 属性:

  • 对于逻辑运算符类型为 LogicalOperator.Or 的筛选器表达式,此字段只能设置为 true。 如果针对逻辑运算符类型为 LogicalOperator.And 的表达式设置了它,则将忽略 IsQuickFindFilter 属性。

  • 一个筛选器表达式层次结构中仅有一个筛选器表达式可设置为 IsQuickFindFilter = true。 如果发现多个,则将引发异常。

  • 如果筛选器表达式的 IsQuickFindFilter 设置为 true,则不能包含任何子筛选器表达式属性,只能包含ConditionExpression属性。 如果添加子筛选器表达式,则将引发异常。

  • IsQuickFindFilter 设置为 true 的筛选器表达式相关的所有条件表达式必须是单个非 null 值条件。 换言之,假定条件由属性、运算符和值组成,则仅支持其中值属性不是为 null的单个值的条件。 此外,这些条件表达式上支持的唯一条件运算符是与不为 null 的单个值一起使用的运算符。 如果检测到一个 null值或多个值,将引发异常。

另请参阅

FilterExpression
使用 QueryExpression 构建查询
使用在 QueryExpression 的左外部联接来查询“不在”记录。
使用 ConditionExpression 类

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权