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

Order by mapped string instead of integer

在数据库中 table "Device" 有一列 "Status"(整数)

Name    |  Status
----------------
Device1     1
Device2     2
Device3     3
Device4     4
Device5     3

在我的应用程序中,我将列 "Status" 映射到人类可读的单词(字符串)

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

如果我按 "status" 排序,结果将按整数排序。

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

在table"Devices"我有60000多条记录,所以我使用分页

结果:

Name     |   Status
------------------
Device1     Start 
Device2     Stop 
Device3     Running 
Device5     Running 
Device4     new Device

我需要的:

Name     |   Status
------------------
Device4     new Device
Device3     Running 
Device5     Running 
Device1     Start 
Device2     Stop

我能做什么?

也许换个号码?

public enum Status
{
   Start = 3,
   Stop = 4,
   Running = 2,
   new Device = 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);