Asp.net web api 将OData查询转换为SQL

Asp.net web api 将OData查询转换为SQL,asp.net-web-api,odata,asp.net-web-api-odata,Asp.net Web Api,Odata,Asp.net Web Api Odata,我在一个ODataController中,我有一个ODataQueryOptions(以及所有其他选项) 我知道数据源是SQLServer中的一个表 然而,我的EF模型(WEB API框架使用它将HTTP请求路由到我的控制器)是无类型的,即我没有POCO类 通常——如果我有一个POCO类——框架会神奇地从OData查询编写SQL,这样分页、过滤和排序在数据库上完成,而不是在web服务器的内存中完成。您可以使用DbContext上的Database.Log查看从涉及POCO类的LINQ语句生成的S

我在一个
ODataController
中,我有一个
ODataQueryOptions
(以及所有其他选项)

我知道数据源是SQLServer中的一个表

然而,我的EF模型(WEB API框架使用它将HTTP请求路由到我的控制器)是无类型的,即我没有POCO类

通常——如果我有一个POCO类——框架会神奇地从OData查询编写SQL,这样分页、过滤和排序在数据库上完成,而不是在web服务器的内存中完成。您可以使用
DbContext
上的
Database.Log
查看从涉及POCO类的LINQ语句生成的SQL

我如何让这一切发生在我身上?我有EF模型,我有OData请求,但是我如何组合它们来查询SQL Server呢?

我写了一篇文章,将OData查询转换为可用于直接查询底层数据库的
IQueryable
对象。您仍然需要提供关于表的元数据,但它可以在运行时传递,而不需要POCO


就生成SQL而言,返回的IQueryable对象是EntityFramework ObjectQuery对象,因此您可以调用
ToString()
来显示SQL,但目前无法检索参数和关联值,因此,最好使用生成的
IQueryable
直接查询数据库。

我通过在以下位置将ODATA查询转换为SQL编写了一个动态ODATA:。