linq自定义订购,无需记录所有记录

时间:2017-09-08 06:29:43

标签: linq sql-order-by

我有超过100k记录的数据库(SQL server)表。表包含枚举(DB中的smallInt),其值为0-5。(前端的C#)我正在编写用于获取该枚举排序的前10个记录的代码。 我想要自定义订购。比如枚举值为2的记录应该先到4然后是3,同样。

我不想获取所有记录,然后使用icomparer对其进行排序,然后进入前10名。我应该如何编写linq语句。即使SQL命令也适合我。

1 个答案:

答案 0 :(得分:1)

创建一个临时表repository.findByCoreId(..., new PageRequest(0, 3, Direction.ASC, "priority")).getContent(); ,其中[#EnumOrder]值映射到您想要的顺序。然后使用您的表格进行内部联接,并按Enum

进行排序
Order

现在记录将按以下顺序排序:2,4,3,5,0和1.您可以随时更改要插入CREATE TABLE [#EnumOrder] ( [Enum] SMALLINT ,[Order] SMALLINT ) INSERT INTO [#EnumOrder] VALUES (2, 1), (4, 2), (3, 3), (5, 4), (0, 5), (1, 6) SELECT TOP 10 t.* FROM dbo.[YourTable] t INNER JOIN [#EnumOrder] o ON t.EnumColumn = o.Enum ORDER BY o.[Order] DROP TABLE [#EnumOrder] 表的值以获得所需的顺序。