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')
- 工作
通过 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')
- 工作