通过Web API查询Dynamics 365时,可以选择多个运算符来过滤查询的数据。其中一个运算符是contains
,它实际上出现了两次。
一个是OData contains
函数(您可以在“标准查询函数”标题下找到它):
https://msdn.microsoft.com/en-us/library/gg334767.aspx#Filter%20results
示例:
$filter=contains(name,'(sample)')
另一个是Dynamics 365 Web API本身的实现:
https://msdn.microsoft.com/en-us/library/mt608053.aspx
我试过这个,但只得到一个通用SQL错误:
$filter=Microsoft.Dynamics.CRM.Contains(PropertyName='name',PropertyValue='(sample)')
有什么区别?也许有人甚至可以告诉我如何正确调用contains
的Web API版本?
答案 0 :(得分:3)
Latest documentation确认$filter=contains(name,'(sample)')
是使用web api的唯一有效语法。正如Jatin所说,OData过滤器在幕后转换为Query Expression,一些文章(this& this)传达了可能的解决方案是直接在C#Query Expression中使用Like
运算符。
我们在网络API中没有Like
operator equivalent functions。
我的尝试&观察强>:
Microsoft.Dynamics.CRM.Contains
- 通用SQL错误。
$filter=like(name,'%test%')
- 一个名为'的未知函数,如'被找到。这也可能是函数导入或导航属性上的键查找,这是不允许的。
$filter=contains(name, 'test')
- 工作
答案 1 :(得分:2)
我认为这两种方法都是等价的。添加Web API过滤器功能以支持标准OData过滤器功能。 Contains函数是将CRM中支持的所有条件运算符公开为OData函数的结果。有关Contains运算符的信息,请在D365文档中搜索ConditionOperator枚举。它提到了SQL错误背后的原因。 Copying the same below:
必须仅对启用了全文索引的属性使用Contains运算符。否则,您将在检索数据时收到通用SQL错误消息。在Microsoft Dynamics 365默认安装中,仅启用KBArticle(article)实体的属性以进行全文索引。
最好使用Web API过滤功能,因为它更具惯用性。你使用它会遇到什么错误?我认为两者的根本原因可能是相同的,因为OData过滤器查询在后端转换为D365查询表达式,并且包含过滤器应该被转换为包含条件运算符。