C # LINQ - переписать вложенный троичный оператор в вспомогательную функцию - PullRequest
0 голосов
/ 13 июня 2018

Мой код для заказа результатов на основе значения.Он работает, но имеет предупреждение: извлечь этот вложенный троичный оператор в независимый оператор

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 голосов
/ 13 июня 2018

Может быть сделать помощник для извлечения числа, например:

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);
0 голосов
/ 13 июня 2018

Вы можете создать временную таблицу с порядком статуса, как это:

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

В вашем запросе вы можете присоединиться к этой таблице с помощью ключа состояния и порядка по столбцу OrderNo.

Преимущества:

  1. Вы можете изменить порядок без изменения кода
  2. Вы можете динамически добавлять статусы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...