在扩展属性Dynamics CRM中的OData查询筛选,只有在没有结果出来的作品?(Dynamic

2019-10-20 22:16发布

我有一个要求获取Price List Item等均符合以下要求记录:

  1. 通过特定的价目表过滤器
  2. 通过特定的货币过滤器
  3. 由过滤器Name相关的Product包含给定的字符串

我得到的第一个两分工作没有问题,但感觉像扩大不应对过滤很好。 我从一个“直”查询开始Product实体:

.../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_price_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

信息:“加入”操作的结果选择器必须返回一个匿名类型两个属性。

据我所知这是当你打的使用LINQ到CRM关于限制会发生什么.Where()在多个实体一次......似乎不相关的!

这有什么错我的查询?

注:CRM 2013我使用的是On-Premise ,无需任何更新汇总/服务包。

另请注意:等效的SQL,因为可以预计,完美的作品

Answer 1:

我不认为CRM的OData支持在加盟实体添加过滤器。 尝试扭转你实际上开始与实体,并加入到参考实体的路径:

ProductSet()?$filter=substringof('sometext',ProductNumber)&$expand=product_price_levels&$select=product_price_levels/*

PS如果你有linqPad,这是我用来生成此查询:

from p in ProductSet
where p.ProductNumber.Contains("sometext")
select new { p.product_price_levels }


文章来源: Dynamics CRM OData query filtering on expanded attributes only works if no results come out?