我需要提取符合以下要求的Price List Item
条记录:
Name
的{{1}}进行过滤
醇>
我得到的前两点没有问题,但感觉扩展并不能很好地应对过滤。我从一个"直接"查询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
符合某些内容,我会收到错误代码:-2147220970
消息:'加入'的结果选择器操作必须返回两个属性的匿名类型。
AFAIK,当你遇到LINQ-to-CRM关于同时在多个实体上使用$filter
的限制时会发生什么......看起来并不相关!
我的查询有什么问题?
注意:我使用的CRM 2013是.Where()
,没有任何更新汇总/服务包。
另请注意:可以预期的等效SQL可以很好地运行
答案 0 :(得分:2)
我不认为CRM OData支持在已加入的实体上添加过滤器。尝试撤消您实际开始使用的实体,并添加引用实体的路径:
ProductSet()?$filter=substringof('sometext',ProductNumber)&$expand=product_price_levels&$select=product_price_levels/*
P.S。如果你有linqPad,这是我用来生成这个的查询:
from p in ProductSet
where p.ProductNumber.Contains("sometext")
select new { p.product_price_levels }