0
Dim receipts As IQueryable(Of ReceiptEntity) = db.Receipts

'code to filter removed for brevity

Dim sorts() As String = SortExpression.Split(";")

For Each sort As String In sorts
    Dim sortParts() As String = sort.Split(" ")
    If sortParts(1).ToLower = "true" Then
        receipts = receipts.OrderBy(Of ReceiptEntity)(sortParts(0).ToString(), SortDirection.Ascending)
    Else
        receipts = receipts.OrderBy(Of ReceiptEntity)(sortParts(0).ToString(), SortDirection.Descending)
    End If
Next

SortExpression は、「field1 true;field2 false;field3 true」のようになります。

私がしたいのは、クエリに複数の order by フィールドを持たせることです。何が起こっているのかというと、最後の order by だけが適用されます。ここで何が間違っていますか?


作業結果は次のようになります。

Dim receipts As IOrderedQueryable(Of ReceiptEntity) = db.Receipts.Include(Function(r) r.LineItems).Include(Function(r) r.Payments)

Dim sorts() As String = SortExpression.Split(";")
Dim sortParts() As String
sortParts = sorts(0).Split(" ")
If sortParts(1).ToLower = "true" Then
    receipts = receipts.OrderBy(sortParts(0).ToString())
Else
    receipts = receipts.OrderByDescending(sortParts(0).ToString())
End If


For Each sort As String In sorts.Skip(1)
    sortParts = sort.Split(" ")
    If sortParts(1).ToLower = "true" Then
        receipts = receipts.ThenBy(sortParts(0).ToString())
    Else
        receipts = receipts.ThenByDescending(sortParts(0).ToString())
    End If
Next
4

1 に答える 1

1

2 回目以降のすべての並べ替え操作では、ThenBy代わりに使用する必要があります。OrderBy

于 2013-05-30T18:37:50.720 に答える