Dynamics CRM OData查询筛选仅在没有结果时对扩展属性有效?
我需要获取符合以下要求的Dynamics CRM OData查询筛选仅在没有结果时对扩展属性有效?,odata,dynamics-crm,dynamics-crm-2013,Odata,Dynamics Crm,Dynamics Crm 2013,我需要获取符合以下要求的价目表项目记录: 按特定的价格表筛选 按特定货币过滤 按包含给定字符串的相关产品的名称进行筛选 我得到了前两点,没问题,但感觉扩展不能很好地处理过滤。我从对产品实体的“直接”查询开始: .../ProductSet?$filter=substringof('sometext', Name) Equivalent SQL (targeting the corresponding CRM filtered views for clarity): SELECT * FROM
价目表项目
记录:
产品的名称
进行筛选
产品实体的“直接”查询开始:
.../ProductSet?$filter=substringof('sometext', Name)
Equivalent SQL (targeting the corresponding CRM filtered views for clarity):
SELECT * FROM FilteredProduct WHERE ProductNumber LIKE '%sometext%'
上面的查询工作,我可以调整它,没有问题。但是,如果我试图转到ProductPriceLevel
(从而扩展与Product
的关系,即Product\u price\u levels
),我最终会得到以下结果:
.../ProductPriceLevelSet?$expand=product_price_levels&$filter=substringof('sometext', product_price_levels/Name)
Equivalent SQL (again, targeting the relevant filtered views):
SELECT * FROM FilteredProductPriceLevel PPL JOIN FilteredProduct P
ON PPL.ProductId = P.ProductId WHERE P.ProductNumber LIKE '%sometext%'
我看到了两种不同的结果:
- 如果
$filter
没有匹配项,它工作正常并返回空结果集
- 如果
$filter
与某个内容匹配,我会得到一个错误
代码:-2147220970
消息:“Join”操作的结果选择器必须返回两个属性的匿名类型
好吧,如果您在一次对多个实体使用.Where()
时遇到LINQ to CRM的限制,就会发生这种情况。。。似乎不相关
我的问题出了什么问题
注意:我使用的CRM 2013是内部部署的,没有任何更新汇总/服务包
另请注意:正如所料,等效的SQL可以完美地工作我认为CRM OData不支持在连接的实体上添加过滤器。尝试反转实际开始的实体,并向引用实体添加路径:
ProductSet()?$filter=substringof('sometext',ProductNumber)&$expand=product_price_levels&$select=product_price_levels/*
另外,如果您有linqPad,这是我用来生成的查询:
from p in ProductSet
where p.ProductNumber.Contains("sometext")
select new { p.product_price_levels }
您能否编写您试图在odata中执行的等效SQL语句?我有点搞不清楚您是如何尝试应用过滤器的,而SQL语句的可读性要高得多