我的代码是根据值对结果进行排序。它可以工作,但有警告:将此嵌套的三元运算符提取到一个独立的语句中
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
联接此表。
好处:
- 您可以在不更改代码的情况下更改顺序
- 您可以动态添加状态
也许做一个帮手来提取数字,比如:
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);