【发布时间】:2016-06-12 08:11:27
【问题描述】:
我们使用带有 OData 和 Dapper 作为 ORM 的 ASP.Net Webapi。对于 GET 请求,我们使用 options 参数对象和它的 filter 参数来构建 Dapper 查询的 SQL 字符串。这适用于列 eq 值等。
但现在我想做一些服务器端分页。这意味着我使用两个过滤器($top 和 $skip)发出请求。例如。 "https://api.server.com/Orders?$skip=100&$top=50。Dapper 向数据库发出了正确的请求,我得到了一个包含 50 个条目的结果作为来自 dapper 的响应。
然后我将这个结果放入 webapi 控制器的 return 语句中,webapi 似乎自己进行过滤。所以它执行从 50 的结果中跳过 100,这导致 0 个条目。
有没有人有同样的问题,并找到了一种方法来阻止 webapi 过滤但将过滤委托给 ORM?编写 ApiControllers 而不是 ODataControllers 是无可替代的,因为我真的很喜欢使用 odata 语法进行过滤。
感谢您的回答!
【问题讨论】:
-
很想看看您是如何使用 option 参数为 Dapper 构建 SQL 字符串的。
-
您可以从 ODataQueryOptions.Filter.FilterClause.Expression 中获取顶部的 SingleValueNode,这可以提取为树。最简单的方法是用调试器查看。
标签: c# asp.net-web-api odata dapper