我有一个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未被识别为有效的属性” ..
如何对具有嵌套属性的项目执行此过滤?
答案 0 :(得分:1)
查询网址是生成的,还是您自己编写的?我原以为是:
http://api.loc/userprofiles/all/?$orderby=ProfileProperties/Email
通常,使用OData嵌套属性时,请使用斜杠(/)作为分隔符。
否则,您应该包含有关如何生成查询URL的一些信息。
答案 1 :(得分:1)
你可以使用 OData Client Library由Microsoft提供。
你有没有特别的理由不使用它?
的示例//为Freight值大于30的订单定义查询 //按发货日期排序,降序。
DataServiceQuery<Order> selectedOrders = context.Orders
.AddQueryOption("$filter", "Freight gt 30")
.AddQueryOption("$orderby", "OrderID desc");