WCF 数据服务中的集合存在条件
Posted
技术标签:
【中文标题】WCF 数据服务中的集合存在条件【英文标题】:Collection Exists Criteria in WCF Data Services 【发布时间】:2011-03-24 09:01:29 【问题描述】:我正在尝试询问我的 OData 服务:
“给我所有没有类别的产品”
与Products和Category有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
但所有这些都给了我不受支持的例外情况。
我不是在寻找替代方案或选项。请不要用其他选项回答。
【问题讨论】:
【参考方案1】:我使用 WCF 数据服务的经验是缺少 LINQ to rest 的客户端子集。
我有偏见的选择是将其移动到服务器端,在那里您可以访问 LINQ to entites 的完整实现? (或您用来实现数据服务的任何东西)。
[WebGet]
public IQueryable<Products> GetProductsWithoutCategories()
/*start psudo code
from p in Products
where p.Categories.Count == 0
select p
*/
【讨论】:
客户端确实不支持这种查询,因为URL查询语言不支持。不过,上面发布的带有服务操作的解决方案是一个不错的解决方案。【参考方案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 的操作(所以 您可以编写更多查询 结果的运算符 客户端)并使用服务器端 提供者发出上述查询。
【讨论】:
【参考方案3】:我对这个问题的解决方法是$expand查询中的相关字段,然后测试该字段是否为空...
JArray _array = (JArray)main_table_object["some_related_field"];
if (_array.Count > 0)
continue;
.. 这是在从 Windows 7 手机到使用 JSON 作为消息格式的 WCF 服务的查询的上下文中。
【讨论】:
以上是关于WCF 数据服务中的集合存在条件的主要内容,如果未能解决你的问题,请参考以下文章
使用稍微复杂的方法引用 WCF 服务时获取“递归集合数据契约”