1

したがって、データテーブルを取り込み、ユーザーを 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 
4

2 に答える 2

0

使用できますLinq-To-DataSet

Dim bestChoices = From row In usertable.AsEnumerable()
                  Let Rank = row.Field(Of Int32)("Rank")
                  Let OrderCount = row.Field(Of Int32)("OrderCount")
                  Let UserName = row.Field(Of String)("UserName")
                  Let Amount = row.Field(Of Int32)("Amount")
                  Where Not DoesProcessorNeedOrders(UserName, Amount)
                  Order By Rank Ascending, OrderCount Descending

If bestChoices.Any() Then
    Dim bestChoice = bestChoices.First()
    Return String.Format("{0} {1} {2}", bestChoice.UserName, bestChoice.Rank, bestChoice, OrderCount)
Else
    Return "No user is qualified for this order at this moment"
End If
于 2013-05-02T16:14:08.370 に答える