2010-08-02 40 views
6

我想問問我的OData服務:集合存在條件在WCF數據服務

「給我所有的沒有分類的產品」

與產品和類別有M2M關係。

我已經試過:

from p in Products 
where p.Categories == null 
select p 

from p in Products 
where !p.Categories.Any() 
select p 

from p in Products 
where p.Categories.Count == 0 
select p 

但所有這些讓我不支持例外。


我不是尋找替代方案或選擇。請不要用其他選項回答。

回答

2

這是不支持:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataservices/thread/b505d630-c808-4bde-b08e-3ce1dd17f621/

的OData的URL查詢語言目前 不支持這種類型的查詢。由於 結果客戶端的LINQ處理器 也不支持它。如果您認爲增加 功能很有價值,請使用我們的連接 網站來建議該功能,這使得我們的計劃工作更容易 圍繞下一次 。 https://connect.microsoft.com/dataplatform/content/content.aspx?ContentID=15540&wa=wsignin1.0

作爲解決方法,您可以使用 服務操作。定義服務 返回IQueryable的操作(因此 ,您可以在 客戶端的結果上編寫更多查詢 運算符),並使用服務器端 提供程序發出上述查詢。

2

我對WCF數據服務的經驗是缺乏LINQ的客戶端子集。

我有偏見的選擇是將它移動到服務器端,在那裏你可以訪問完整的LINQ實現? (或者你用來實現數據服務的任何東西)。

[WebGet] 
public IQueryable<Products> GetProductsWithoutCategories(){ 
    /*start psudo code 
     from p in Products 
     where p.Categories.Count == 0 
     select p 


    */ 

} 
+0

客戶端確實不支持這種類型的查詢,因爲URL查詢語言不支持它。上面發佈的服務操作解決方案是一個很好的解決方案。 – 2010-08-03 08:58:05

0

我解決這個問題是$拓展相關領域的查詢,然後測試,如果該字段爲空或不...

JArray _array = (JArray)main_table_object["some_related_field"]; 

    if (_array.Count > 0) 
     continue; 

..這是在上下文從Windows 7電話到使用JSON作爲消息格式的WCF服務的查詢。