C# 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);

我应该如何在辅助函数中编写此逻辑以实现相同的目标?

您可以使用如下状态顺序创建临时表:

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

在查询中,可以按状态键联接此表,并按列顺序OrderNo联接此表。

好处:

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

也许做一个帮手来提取数字,比如:

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);

最新更新