Linq2Rest 不适用于嵌套属性
本文关键字:属性 嵌套 适用于 不适用 Linq2Rest | 更新日期: 2023-09-27 18:36:28
我有一个返回序列化为 JSON 的 c# 对象的 API。
我需要在我的 API URL 上实现某种 OData 格式解析。例如,最初看起来像这样:http://api.loc/userprofiles/all/?$orderby=ProfileProperties.Email
我正在寻找一些或多或少简单的库,它允许我解析筛选器/排序依据 (OData) 查询字符串并对我的数据源应用筛选器。我发现 Linq2Rest 的格式非常简单,我可以像这样使用它:
var filtered = allItems.Filter(Request.Params).OfType<Content.UserProfile>();
问题是我的 Content.UserProfile 有一个嵌套属性。配置文件属性,其中包含我感兴趣的属性
因此,例如:
var user = new Content.UserProfile();
user.ProfileProperties.Email = "my@mail.com";
user.ProfileProperties.FirstName = "Fukoka";
。。等
不幸的是,Linq2Rest 无法解析我的查询并失败并显示消息"ProfileProperties.Email 不被识别为有效财产"..
然后如何对具有嵌套属性的项目执行此过滤器?
查询 URL 是生成的,还是您自己编写的?我本来希望它是:
http://api.loc/userprofiles/all/?$orderby=ProfileProperties/Email
通常,对于 OData 嵌套属性,使用斜杠 (/) 作为分隔符。
否则,应包含有关如何生成查询 URL 的一些信息。
您可以使用
OData 客户端库由 Microsoft 提供。
有什么具体原因你不使用它吗?
取自"查询选项"的示例
为运费值大于 30 的订单定义查询这是按发货日期排序的,降序排列。
DataServiceQuery<Order> selectedOrders = context.Orders
.AddQueryOption("$filter", "Freight gt 30")
.AddQueryOption("$orderby", "OrderID desc");