我有超过100k记录的数据库(SQL server)表。表包含枚举(DB中的smallInt),其值为0-5。(前端的C#)我正在编写用于获取该枚举排序的前10个记录的代码。 我想要自定义订购。比如枚举值为2的记录应该先到4然后是3,同样。
我不想获取所有记录,然后使用icomparer对其进行排序,然后进入前10名。我应该如何编写linq语句。即使SQL命令也适合我。
答案 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]
表的值以获得所需的顺序。