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

时间:2016-09-20 13:42:37

标签: c# sql lambda sql-order-by paging

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

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

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

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

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

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

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

结果:

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

我该怎么办?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

也许更改号码?

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