按映射字符串而不是整数排序

问题描述 投票:0回答:2

在数据库表“设备”中有一列“状态”(整数)

姓名 |  地位
----------------
设备1 1
设备2 2
设备3 3
设备4 4
设备5 3

在我的应用程序中,我已将“状态”列映射到人类可读的单词(字符串)

public enum Status
{
   Start = 1,
   Stop = 2,
   Running = 3,
   new Device = 4,
}

如果我按“状态”排序,结果将按整数排序。

_repository.Query<Device>().OrderBy(c=>c.status)
                           .Skip(skip)
                           .Take(500);

在“Devices”表中我有超过 60.000 条记录,所以我使用分页

结果:

姓名 |   地位
------------------
设备1启动 
设备2停止 
设备3正在运行 
设备5正在运行 
Device4 新设备

我需要什么:

姓名 |   地位
------------------
Device4 新设备
设备3正在运行 
设备5正在运行 
设备1启动 
设备2停止

我能做什么?

c# sql lambda pagination sql-order-by
2个回答
1
投票

您可以使用条件运算符:

var query = _repository.Query()
    .OrderBy(c => c.Status == Status.NewDevice ? 0 : c.Status == Status.Running ? 1 : c.Status == Status.Start ? 2 : 3)
    .Skip(skip)
    .Take(500);

0
投票

也许要换号码?

public enum Status
{
   Start = 3,
   Stop = 4,
   Running = 2,
   new Device = 1,
}
© www.soinside.com 2019 - 2024. All rights reserved.