2013-10-22 68 views
0

我有一个API,返回序列化为JSON的c#对象。Linq2Rest不适用于嵌套属性?

我需要在我的API网址上实现某种OData格式解析。 也就是说例如,原来是这样的: http://api.loc/userprofiles/all/?$orderby=ProfileProperties.Email

我一直在寻找一些或多或少直截了当库,让我来分析过滤器/排序依据(OData的)查询字符串,并在我的数据源应用筛选。我发现Linq2Rest它很简单格式,其中我可以用它喜欢:

var filtered = allItems.Filter(Request.Params).OfType<Content.UserProfile>(); 

问题是,我Content.UserProfile有一个嵌套属性.ProfileProperties,其中包含我感兴趣的

属性

因此,例如:

var user = new Content.UserProfile(); 
user.ProfileProperties.Email = "[email protected]"; 
user.ProfileProperties.FirstName = "Fukoka"; 

..等

不幸Linq2Rest无法解析我的查询和失败,提示信息 “ProfileProperties.Email不被识别为一个有效的财产” ..

我怎样才能然后对嵌套属性的项目该过滤器?

回答

1

查询网址是生成的,还是您自己编写的?我本来期望它是:

http://api.loc/userprofiles/all/?$orderby=ProfileProperties/Email 

通常与OData的嵌套属性使用作为分隔符斜杠(/)。

否则,您应该包含有关查询URL如何生成的一些信息。

+0

非常感谢!它现在似乎在工作。唷:)是最初的URL是我写的(我正在测试新的东西..)..现在,这一步似乎解决了,我的下一个问题将是 - 我应该如何在客户端上生成这些URL?你能指导我吗? :) – Denis

+0

Linq2Rest也有一个客户端部分。看看这个教程:http://reimers.dk/tutorials/using-linq2rest-as-a-client – jjrdk

+0

谢谢!我找到了这个页面,但我一直在努力寻找IRestClient的实现;如果我不需要任何客户端和反序列化,该怎么办?我只需要Linq2Rest在Linq表达式中创建适当的查询字符串(在URL中)(甚至应用于'dummy'属性 - Provider.Query) – Denis

1

您可以使用Microsoft提供的 OData Client Library

是否有任何具体的原因,你不使用它?从Query Options

//采取

实施例定义的订单查询具有大于30 //和由船舶日期排序,下降一个货运值。

DataServiceQuery<Order> selectedOrders = context.Orders 
    .AddQueryOption("$filter", "Freight gt 30") 
    .AddQueryOption("$orderby", "OrderID desc");