将 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 表达式的主要内容,如果未能解决你的问题,请参考以下文章