C#LINQ - 将嵌套的三元运算符重写为辅助函数

时间:2018-06-13 03:47:50

标签: c# entity-framework linq

我的代码是根据价值订购结果。它有效,但有警告:将这个嵌套的三元运算符提取到一个独立的语句

results = resultSets.OrderBy(e => e.Status == "Status1" ? 1 :
        e.Status == "Status2" ? 2 :
        e.Status == "Status3" ? 3 :
        e.Status == "Status4" ? 4 :
        e.Status == "Status5" ? 5 : 6)
        .ThenByDescending(e => e.Times);

我应该如何在辅助函数中编写这个逻辑来实现同样的目的?

2 个答案:

答案 0 :(得分:0)

您可以使用以下状态订单创建临时表:

Status  | OrderNo
-----------------
Status1 | 1
Status2 | 2
Status3 | 3
Status4 | 4

在您的查询中,您可以按状态键加入此表,并按OrderNo列排序。

优点:

  1. 您可以在不更改代码的情况下更改订单
  2. 您可以动态添加状态

答案 1 :(得分:-1)

也许可以帮助提取数字,例如:

private int GetStatus(string status, int defaultStatus = 0)
{
    int result;
    return int.TryParse(status.Replace("Status",string.Empty), out result)
       ? result
       : defaultStatus;
}

然后,

results = resultSets.OrderBy(e => GetStatus(e.Status))
    .ThenByDescending(e => e.Times);