0

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

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

我一直在寻找一些或多或少简单的库,可以让我解析 Filter / OrderBy (OData) 查询字符串并在我的数据源上应用过滤器。我发现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";

.. ETC

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

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

4

2 回答 2

1

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

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

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

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

于 2013-10-22T15:12:45.643 回答
1

您可以使用 Microsoft 提供的OData 客户端库。

您不使用它有什么具体原因吗?

取自查询选项的示例

// 定义对运费值大于 30 的订单的查询 // 按发货日期降序排列。

  DataServiceQuery<Order> selectedOrders = context.Orders
    .AddQueryOption("$filter", "Freight gt 30")
    .AddQueryOption("$orderby", "OrderID desc");
于 2013-10-22T15:43:43.657 回答