Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Linq-to-Entity框架中的多动态Order-By_Vb.net_Linq To Entities_Entity Framework 5 - Fatal编程技术网

Vb.net Linq-to-Entity框架中的多动态Order-By

Vb.net Linq-to-Entity框架中的多动态Order-By,vb.net,linq-to-entities,entity-framework-5,Vb.net,Linq To Entities,Entity Framework 5,SortExpression的输入类似于“field1 true;field2 false;field3 true” 我希望查询具有多个order by字段,实际情况是只应用最后一个order by。我做错了什么 工作结果如下所示: Dim receipts As IQueryable(Of ReceiptEntity) = db.Receipts 'code to filter removed for brevity Dim sorts() As String = SortExpress

SortExpression的输入类似于“field1 true;field2 false;field3 true”

我希望查询具有多个order by字段,实际情况是只应用最后一个order by。我做错了什么


工作结果如下所示:

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

对于第二次和所有后续排序操作,您必须使用
ThenBy
而不是
OrderBy

谢谢,您还必须在声明中使用IOrderedQueryable(of T)而不是IQueryable(of T),以获得ThenBy和ThenBy降序。
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