2014-09-11 47 views
0

我有一個要求獲取Price List Item記錄等均符合以下要求:Dynamics CRM對擴展屬性的OData查詢過濾僅在沒有結果時才起作用?

  1. 過濾器通過特定的價目表
  2. 過濾器通過特定的貨幣
  3. 濾波由相關ProductName包含給定字符串

我得到了前兩個工作沒有問題,但它感覺像擴大不適應過濾。我從一個「直」查詢開始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

信息:「加入」操作的結果選擇器必須返回一個匿名類型兩個屬性。

據我所知,這時候你打多個實體使用.Where()一次......似乎不相關的關於LINQ到CRM的限制會發生什麼!

我的查詢出了什麼問題?

注意:我使用的CRM 2013是On-Premise,沒有任何更新彙總/服務包。

另請注意:相當於SQL,因爲可以預計,完美的作品

+0

你能寫出你試圖在odata中執行的等效SQL語句嗎?我對你如何嘗試應用過濾器感到困惑,並且SQL語句更具可讀性。 – Daryl 2014-09-11 14:48:11

+0

Aye,對於添加到問題中的過濾視圖的等效SQL – Alex 2014-09-11 15:35:47

回答

0

我不認爲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 } 
相關問題