LINQ中如何按案例排序

Jua*_*eza 1 c# linq case sql-order-by

我有这个答案实体框架OrderBy“ CASE WHEN”,但这只能处理两个选项

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

我有一个文本字段,希望行按特定顺序显示。在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
Run Code Online (Sandbox Code Playgroud)

Jos*_*eph 7

如何创建您的排序顺序图?

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);
Run Code Online (Sandbox Code Playgroud)