OData "contains" 与 Dynamics 365 Web API "contains"

OData "contains" vs Dynamics 365 Web API "contains"

通过 Web 查询 Dynamics 365 时 API 有多个运算符可供选择以筛选查询的数据。其中一个运算符是 contains,它实际上出现了两次。

一个是 OData contains 函数(您可以在标题 'Standard query functions' 下找到它):

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)')

有什么区别?也许有人甚至可以告诉我如何正确调用 Web API 版本的 contains

我认为这两种方法是等价的。新增WebAPI过滤功能,支持标准的OData过滤功能。 Contains 函数是将 CRM 中支持的所有条件运算符公开为 OData 函数的结果。请在 D365 文档中搜索 ConditionOperator 枚举以获取有关 Contains 运算符的信息。它提到了 SQL 错误背后的原因。 Copying the same below:

You must use the Contains operator for only those attributes that are enabled for full-text indexing. Otherwise, you will receive a generic SQL error message while retrieving data. In a Microsoft Dynamics 365 default installation, only the attributes of the KBArticle (article) entity are enabled for full-text indexing.

最好使用 Web API 过滤器功能,因为它更符合习惯。你在使用它时遇到什么错误?我想这两者的根本原因可能是相同的,因为 OData 过滤器查询在后端转换为 D365 查询表达式并且包含过滤器应该被转换为包含条件运算符。

Latest documentation confirms $filter=contains(name,'(sample)') is the only working syntax with web api. As Jatin says, OData filter is converted into Query Expression behind the scenes, some articles (this & this) 表示可能的解决方案是直接在 C# 查询表达式中使用 Like 运算符。

我们在网络 api 中没有 Like operator equivalent functions

我的尝试与观察:

Microsoft.Dynamics.CRM.Contains - 一般 SQL 错误。

$filter=like(name,'%test%') - 发现名称为 'like' 的未知函数。这也可能是函数导入或导航键查找 属性,这是不允许的。

$filter=contains(name, 'test') - 工作