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

And*_*cus 3 iqueryable wcf-data-services odata

我想创建一个从多个源返回数据的OData服务.出于这个原因,我不能将WCF数据服务与任何开箱即用的提供商一起使用,而且我们真的希望更多地控制数据模型.

如果我们坚持使用MS产品堆栈,我认为我们有两种选择;

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

  2. 我们将WCF数据服务与自定义提供程序一起使用,这要求我们为资源集传递IQueryable,这使我们可以执行Select*FROM Table并使用Linq对象,或者实现我们自己的IQueryable提供程序,该提供程序支持所需的表达式由OData.WCF数据服务甚至会接受IQuerable吗?

哪个最容易实现?我们大多只想支持OData规范的$ filter功能,$ expand和$ select可以在以后使用.

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

Dav*_*veB 5

您可以编写自己的数据上下文类.您需要的功能越多,工作量就越大.在WCF数据服务工具包可能有一定的帮助,我发现这个OData的路线图:暴露任何数据源作为OData服务从MIX表现是有帮助的.

所以我说编写一个自定义IQueryable提供程序会更容易和更清洁.