我在ASP.NET API 2 Controller 中使用[EnableQuery](System.Web.Http.OData)来启用OData v3筛选/排序/分页。我注意到使用$orderby子句返回的数据按以下方式排序(以下是一些示例-它们是字符串,不一定具有模式):

LoadTest1000_1
LoadTest1000_10
LoadTest1000_1000
LoadTest1000_2
LoadTest1000_20
[etc]

当我需要自然排序时:
LoadTest1000_1
LoadTest1000_2
LoadTest1000_10
LoadTest1000_20
LoadTest1000_1000
LoadTest1000_2000
[etc]

如何启用这种排序?我可以使用任何扩展点来提供自己的排序逻辑吗?

最佳答案

我认为没有一个很好的方法可以做到这一点。首先,SQL Server并未内置对自然排序的支持。

也就是说,您也许可以使用自定义oData函数/操作。对于v3,请查看https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/odata-actions

否则,对于v4 https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

无论您是随机的互联网陌生人,我祝您成功!

关于c# - OData $ orderby查询中的自然排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43687805/

10-14 10:36