したがって、データテーブルを取り込み、ユーザーを 2 列で並べ替えるこの関数があります。(ランクと注文数)
Function DetermineBestUser(ByVal usertable As DataTable)
Dim bestchoice As DataRow()
For u = 0 To usertable.Rows.Count - 1
If Not DoesProcessorNeedOrders(usertable.Rows(u).Item("UserName"), usertable.Rows(u).Item("Amount")) Then
usertable.Rows(u).Delete()
End If
Next
bestchoice = usertable.Select("", "Rank ASC, OrderCount DESC")
If IsDBNull(usertable) Then
Console.WriteLine("No user is qualified for this order at this moment")
End If
Return bestchoice(0)(0).ToString
End Function
問題は、この関数が正しく機能することがあり、ユーザーに最高のランク (1 または 2) と最低の OrderCount (0 - 30+) を与えることです。ただし、正しい人が返されない場合があります。これを修正する唯一の方法は、「Ordercount DESC」を「OrderCount ASC」に変更することです。ただし、この変更はその特定の注文に対してのみ機能し、間違った人を返すことに戻ります.
これをより詳細に示すいくつかのテスト ランがあります: R1 & R2 = ランク 1 または 2 / "OrderCount"
Rank ASC, Ordercount ASC
#1
dane-R2 / 12
jerm-R1 / 15
tulsa-R1 / 5
---picks Jerm (should pick tulsa)
#2
Dane-R2 / 14
Jerm-R2 / 15
Kate- R2 / 15
---picks Dane
#3
Dane-R2 / 15
Jerm-R2 / 5
Kate-R2 / 5
---picks dane (should pick Jerm or Kate)
Rank ASC, Ordercount DESC
#1
dane-R2 / 12
jerm-R1 / 15
tulsa-R1 / 5
---picks Tulsa
#2
Dane-R2 / 14
Jerm-R2 / 15
Kate- R2 / 15
---picks Jerm (should pick Dane)
#3
Dane-R2 / 15
Jerm-R2 / 5
Kate-R2 / 5
---picks Jerm