【问题标题】:Order by mapped string instead of integer按映射字符串而不是整数排序
【发布时间】:2016-09-20 13:42:37
【问题描述】:

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

姓名 |地位 ---------------- 设备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);

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

结果:

姓名 |地位 ------------------ 设备 1 开始 设备 2 停止 Device3 正在运行 设备 5 正在运行 Device4 新设备

我需要什么:

姓名 |地位 ------------------ Device4 新设备 Device3 正在运行 设备 5 正在运行 设备 1 开始 设备 2 停止

我能做什么?

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      也许换个号码?

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

      【讨论】:

        猜你喜欢
        • 2015-10-17
        • 2014-07-14
        • 1970-01-01
        • 2013-04-23
        • 2019-01-13
        • 2023-03-26
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        相关资源
        最近更新 更多