2013-05-30 3 views
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 истинной, field2 ложь; field3 правда»Multiple Dynamic Заказывайте в Linq к Entity Framework

То, что я хочу, чтобы это произошло для запроса, чтобы иметь несколько заказ на полях, какие происходит только в том, что применяется только последний порядок. Что я здесь делаю неправильно?


Вот что рабочий результат выглядит следующим образом:

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 

ответ

1

Вы должны использовать ThenBy вместо OrderBy для второго и всех последующих операций сортировки.

+0

Спасибо, вы также должны использовать IOrderedQueryable (of T) вместо IQueryable (of T) в объявлении, чтобы получить ThenBy и ThenByDescending. – BlackICE

Смежные вопросы