【问题标题】:Does OData allow Users to Query the SQL EF Database with IQueryable?OData 是否允许用户使用 IQueryable 查询 SQL EF 数据库?
【发布时间】:2019-08-20 07:24:24
【问题描述】:

是否有任何方法可以通过 API 参数查询实际的 EF 数据库?

我们知道 OData Query 允许查询最终结果 API。是否可以使用 IQueryable 从 OData Query Api 层发送简单的 SQL EF 查询?

我们想要应用分页,而不是提取所有 1000 条记录,而是让一些 API 层,只查询需要的结果(例如,仅结果 5-10)等。这可能不是一直都是最佳实践,只是在某些情况下需要存在选项。

/api/Product?$skip=5&$top=5

/api/persons?$orderby=name
/api/persons?$select=ID,Name
/api/students?$filter=Name eq ‘Todd’

【问题讨论】:

    标签: c# entity-framework asp.net-core .net-core odata


    【解决方案1】:

    参数 $skip 和 $top 确实存在于 OData 中,如果您在 IQueryable 上执行这些参数,它们应该可以工作。

    例如,调用以下 URL:

    http://localhost:24367/TestData?$skip=5&$top=5
    

    将跳过前 5 条记录并获取接下来的 5 条记录。

    您的 MVC 操作(如果您是 MVC)将如下所示:

    [EnableQuery]
    public IHttpActionResult Get()  
    {  
        var result = GetData().AsQueryable();  
        return Ok(result);  
    }  
    

    可以在这篇优秀的帖子中找到更多信息: https://www.c-sharpcorner.com/article/paging-with-odata-and-Asp-Net-web-api/

    【讨论】:

    • 所以如果我只需要 5 条记录,这实际上会直接查询数据库,而不是抓取 100 条,然后过滤 5 条?谢谢
    • 是的,如果您在真正的 IQueryable 上执行此操作。如果您进行查询,然后先执行 ToList(),则它不再是 IQueryable,而是将 skip 和 top 应用于 List。因此,只要您使用真正的 IQueryable,这应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多