集合存在于WCF数据服务中的标准

时间:2010-08-02 18:41:50

标签: linq wcf wcf-data-services

我正在尝试询问我的OData服务:

“向我提供所有没有类别的产品”

产品和类别的关系为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

但所有这些都让我不支持例外。


我不是在寻找替代品或选择。请不要回答其他选择。

3 个答案:

答案 0 :(得分:2)

我对WCF数据服务的经验是缺少LINQ的客户端子集。

我有偏见的选择是将它移动到服务器端,你可以访问LINQ的完整实现吗? (或用于实现数据服务的任何内容)。

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


    */

 }

答案 1 :(得分: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 :(得分:0)

我对这个问题的解决办法是$扩展查询中的相关字段,然后测试该字段是否为空......

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

   if (_array.Count > 0) 
      continue; 

..这是在使用JSON作为消息格式从Windows 7手机到WCF服务的查询的上下文中。