Dynamics 365组织服务使用Query Expression查询数据时候请谨慎使用ConditionOperator.Contains
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复418或者20200720可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
看到这个操作符Contains,很多人都会理解为包含的意思。在使用组织服务查询数据时候,有的人就会使用这个操作符,ConditionOperator.Contains。但是一执行查询,就会产生Generic SQL Error的异常,怎么回事?
对这个操作符的解释请参考官方文档: ConditionOperator EnumType 。解释是:For an attribute enabled for full-text indexing: the string contains another string.
可以知道,这个操作符号是用于启用了全文索引的字段搜索。如果被搜索的字段没有启用全文索引,就会报Generic SQL Error的异常。
如果真的要对普通字段执行包含某些字符的搜索怎么办?可以通过高级查找功能的包含(Contains)操作符来查看究竟用的是啥。
可以知道,用的是类似如下的条件,可以看到,用的操作符是 like ,而不是Contains 。官方文档对 like操作符的解释是 The character string is matched to the specified pattern.
<condition attribute="ly_name" operator="like" value="%搜索值%" />
如果一定要用Query Expression来查询数据的话,也可以使用包含,这时候用 like就可以,类似如下的查询条件即可。
queryExpression.Criteria.AddCondition("ly_name", ConditionOperator.Like, "%搜索值%");
Web API也有contains操作符号,具体请参考 Query Data using the Web API ,这个就是大家理解的包含的意思,示例如下:
https://luoyongdemo.crm5.dynamics.com/api/data/v9.1/ly_order?$filter=contains(ly_name,'2020')
Web API除了支持contains之外,还支持endswith 和 startswith ,用法和contains类似,我就不举例子了。