【发布时间】:2017-07-06 05:30:25
【问题描述】:
我有一个对象列表,我正在尝试按两个属性排序,其中一个属性按自定义顺序排序。该列表具有 ReqType 和 PartNumber 的属性。 ReqType 将为“M”、“B”、“S”或 null,我想按该顺序对列表进行排序。然后按 PartNumber 排序。
Input list:
PartNumber ReqType
124 B
125 M
123 B
121 S
120 M
115
Expected Sort:
PartNumber ReqType
120 M
125 M
123 B
124 B
121 S
115
我从下面的代码开始,但它只按字母顺序对 ReqType 进行排序。
Return EBom.OrderBy(Function(f) f.ReqType).ThenBy(Function(f) f.PartNumber).ToList
然后我找到了一种使用以下代码创建自定义排序顺序的方法。虽然使用 Ebom.Sort() 似乎不允许我对 PartNumber 进行第二次排序。我意识到我可以将 PartNumber 排序添加到自定义函数中,但这似乎需要做很多工作。
EBom.Sort()
Return EBom.ToList
Implements IComparable(Of EBomList)
Public Function SortReq(other As EBomList) As Integer Implements IComparable(Of EBomList).CompareTo
If (Me.ReqType = other.ReqType) Then
Return 0
ElseIf (Me.ReqType = "M") Then
Return -1
ElseIf (Me.ReqType = "B") Then
If (other.ReqType = "M") Then
Return 1
Else
Return -1
End If
ElseIf (Me.ReqType = "S") Then
If (other.ReqType = "M" Or other.ReqType = "B") Then
Return 1
Else
Return -1
End If
Else
Return 1
End If
End Function
有没有更简单的方法来按自定义顺序排序,或者至少将自定义排序函数与 .thenby(.....) 结合起来以获得我想要的顺序?
【问题讨论】: