哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?

Posted

技术标签:

【中文标题】哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?【英文标题】:Which is easier, write a Custom OData uri parser or a custom IQueryable provider? 【发布时间】:2011-11-28 15:37:56 【问题描述】:

我想创建一个从多个来源返回数据的 OData 服务。出于这个原因,我不能将 WCF 数据服务与任何开箱即用的提供程序一起使用,而且我们确实希望对数据模型进行更多控制。

我知道如果我们坚持使用 MS 产品堆栈,我们有两个选择;

    使用 WCF 和 WebGet/WebInvoke 来模拟 OData api,并在内部执行查询字符串解析和翻译。例如对于我们的数据在 Sql 数据库中的情况,我们必须将 $filter 子句转换为 SQL where 子句才能构建查询。请注意,我们不能在这里使用任何类型的 ORM,因为我们的数据模型是动态的,并且我们没有任何可以使用 ORM 填充的 CLR 实体类。

    我们将 WCF 数据服务与自定义提供程序一起使用,这要求我们为资源集传递一个 IQueryable,这让我们要么执行 Select * FROM Table 并使用 Linq to objects,要么实现我们自己的 IQueryable支持 OData 所需表达式的提供程序。 WCF 数据服务是否会接受 IQuerable?

哪个最容易实现?我们主要只是想支持 OData 规范的 $filter 功能,$expand 和 $select 可以在以后出现。

放弃 WCF 数据服务似乎是一种耻辱,如果它可以提供解析的 OData 查询,然后您可以自己转换为 Linq 查询,而不是期望您的数据源具有 IQueryable 提供程序,那将是更好的选择。

【问题讨论】:

【参考方案1】:

您可以编写自己的数据上下文类。您需要的功能越多,工作量就越大。 WCF Data Services Toolkit 可能会有所帮助,我发现来自 MIX 的 OData Roadmap: Exposing Any Data Source as an OData service 演示很有帮助。

所以我说编写自定义 IQueryable 提供程序会更容易和更简洁。

【讨论】:

以上是关于哪个更容易,编写自定义 OData uri 解析器或自定义 IQueryable 提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Microsoft OData 通过依赖注入自定义 ODataWriterSettings

编写自定义表达式解析器或使用ANTLR库?

如何为计时时间戳使用自定义 serde 反序列化器?

S4 Hana Cloud-创建自定义CDSVIEW并发布OData服务使用