使用LotTypeId 的重新映射来替代已接受答案的几个C# 8。
像这样重新映射LotTypeId:
14 -> 1
9 -> 2
15 -> 3
others -> 4
我们可以为LotTypeId 使用单个OrderBy。
LotTypeId 的内联重映射(最少代码行选项)
var lotResults = lotTypes
.OrderBy(x => x.LotTypeId switch { 14 => 1, 9 => 2, 15 => 3, _ => 4 })
.ThenBy(x => x.Position)
.ToList();
使用重映射方法(跨多个 LINQ 表达式重用)
var lotResults = lotTypes
.OrderBy(x => RemapLotTypeId(x.LotTypeId))
.ThenBy(x => x.Position)
.ToList();
private static int RemapLotTypeId(int lotTypeId) => lotTypeId switch { 14 => 1, 9 => 2, 15 => 3, _ => 4 };
当您有超过 5 次重新映射时,您可能不想维护映射的值,只需要查找实际的键,在这种情况下是 14, 9, 15。这可以使用List 解决。此映射将从零开始:14 -> 0 ... 其他 -> 3
var lotResults = lotTypes
.OrderBy(x => RemapLotTypeIdUsingList(x.LotTypeId))
.ThenBy(x => x.Position)
.ToList();
private static readonly IList<int> LotTypeIds = new List<int> { 14, 9, 15 }.AsReadOnly();
private static int RemapLotTypeIdUsingList(int keyToFind)
{
var sortKey = LotTypeIds.IndexOf(keyToFind);
return sortKey < 0 ? LotTypeIds.Count : sortKey;
}
所有方法都在我的电脑上进行了测试和验证。