Linq2Rest不适用于嵌套属性?

时间:2013-10-22 14:31:32

标签: c# asp.net-web-api odata

我有一个API,它返回序列化为JSON的c#对象。

我需要在API URL上实现某种OData格式解析。 例如,原来看起来像这样: http://api.loc/userprofiles/all/?$orderby=ProfileProperties.Email

我正在寻找一些或多或少简单的库,它允许我解析Filter / OrderBy(OData)查询字符串并在我的数据源上应用Filter。我找到了 Linq2Rest 这个非常简单的格式,我可以像以下一样使用它:

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

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

所以,例如:

var user = new Content.UserProfile();
user.ProfileProperties.Email = "my@mail.com";
user.ProfileProperties.FirstName = "Fukoka";

..等等

不幸的是,Linq2Rest无法解析我的查询并失败并显示一条消息 “ProfileProperties.Email未被识别为有效的属性” ..

如何对具有嵌套属性的项目执行此过滤?

2 个答案:

答案 0 :(得分:1)

查询网址是生成的,还是您自己编写的?我原以为是:

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

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

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

答案 1 :(得分:1)

你可以使用 OData Client Library由Microsoft提供。

你有没有特别的理由不使用它?

取自Query Options

的示例

//为Freight值大于30的订单定义查询 //按发货日期排序,降序。

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