Как упорядочить случай в LINQ - PullRequest
0 голосов
/ 08 мая 2018

У меня есть этот ответ Структура сущностей OrderBy "CASE WHEN" , но это обрабатывает только две опции

var p = ctx.People.OrderBy(p => (p.IsQualityNetwork == 1 || p.IsEmployee == 1) ? 0 : 1)
                  .ThenBy(p => p.Name);

У меня есть текстовое поле, и я хочу, чтобы строки отображались в определенном порядке.В sql я бы сделал:

ORDER BY CASE when name = "ca" then 1
              when name = "po" then 2
              when name = "pe" then 3 
              when name = "ps" then 4
              when name = "st" then 5
              when name = "mu" then 6
         END

1 Ответ

0 голосов
/ 08 мая 2018

Как насчет создания карты вашего порядка сортировки?

var sortOrder = new Dictionary<string,int>
{
  { "ca", 1 },
  { "po", 2 },
  { "pe", 3 },
  { "ps", 4 },
  { "st", 5 },
  { "mu", 6 }
};

var defaultOrder = sortOrder.Max(x => x.Value) + 1;

var sortedPeople = ctx
  .People
  .AsEnumerable()
  .OrderBy(p => (p.IsQualityNetwork == 1 || p.IsEmployee == 1) ? 0 : 1)
  .ThenBy(p => sortOrder.TryGetValue(p.Name, out var order) ? order : defaultOrder);
...