将 OData Uri 转换为等效的 Linq 表达式

Posted

技术标签:

【中文标题】将 OData Uri 转换为等效的 Linq 表达式【英文标题】:Convert OData Uri to his equivalent Linq expression 【发布时间】:2011-08-04 15:19:36 【问题描述】:

我正在创建一个 WCF 服务,其结果不是严格的 OData 提要(出于复杂的原因、业务战略等)。此外,URL 的格式与 OData 略有不同,尽管其大部分功能非常相似。

如何在 Linq 表达式树中转换 URI?

提前致谢。

【问题讨论】:

【参考方案1】:

看看 Linq2Rest - https://bitbucket.org/jjrdk/linq2rest。它将 OData 查询解析为 LINQ 表达式,反之亦然。它也可以在 Nuget 上使用。

【讨论】:

【参考方案2】:

目前,此功能并未单独公开。并且自己编写相当复杂(取决于您需要支持的查询类型和您的模型)。 真的有必要偏离OData协议吗?也许你需要做的事情可以通过其他方式来实现。

【讨论】:

感谢您的回答。这是必要的,因为业务策略更改了关键字并且返回的提要略有不同(例如:自定义扩展中的条目有效负载)。 我必须将接收到的 Uri 转换为 Linq 查询。如果它是 OData,没问题,因为 WCF 数据服务已经完成了所有工作。问题是在内部它几乎像 OData 但具有不同的 Uri 格式。 我目前正在“解码” Uri 并通过 Dynamic Linq 启动查询。 使用 Dynamic Linq 我可以成功构建查询。谢谢大家【参考方案3】:

您可以使用以下 nuget 包:https://www.nuget.org/packages/Community.OData.Linq

它允许在 linq expresson 中使用 OData 文本查询参数来处理任何不依赖 ASP.NET 的 IQuerable

var result = query.OData().Filter("Id eq 1 or Name eq 'n3'").OrderBy("Name desc").ToArray();

【讨论】:

以上是关于将 OData Uri 转换为等效的 Linq 表达式的主要内容,如果未能解决你的问题,请参考以下文章

Net Core:在洋葱架构中使用OData,将查询参数转换为Linq

AZURE 表存储、ODATA 和更友好的 URI 查询

与 OData 控制器等效的 Odata WCF 服务功能

如何将字符串转换为其等效的 LINQ 表达式树?

OData URI 到 JSON mongoDB 查询

Lambda 表达式 LINQ 等效于 SQL 在同一表/变量上存在查询