3

我有一个本地集合,我正在尝试使用 Linq 进行排序,但内存集合中返回的仍然按数字 ID 列 FailureID 排序。知道为什么这些 OrderBy 条款没有生效吗?

目的

Public Class OpenBuildFaultsViewModel

    Public Property FailureID As Int64
    Public Property ModelName As String
    Public Property ZoneName As String
    Public Property Fault As String
    Public Property FaultCode As String
    Public Property FaultCodeDetail As String
    Public Property FaultArea As String
    Public Property MajorAssembly As String
    Public Property SubAssembly As String
    Public Property ComponentAssembly As String
    Public Property BusinessTest As String
    Public Property AuditScore As String
    Public Property Comment As String
    Public Property ShortagePart As String
    Public Property CreatedBy As String
    Public Property FixedByID As Int32
    Public Property FixedByComment As String
    Public Property FixedByFaultRectificationID As Int32

End Class

订购方式

Function Index() As ActionResult

        Dim data As IEnumerable(Of OpenBuildFaultsViewModel) = Session("Failures")

        Dim model = From fails In data.Where(Function(w) w.FixedByID.Equals(0)).
                                        OrderBy(Function(o) o.MajorAssembly).
                                        OrderBy(Function(o) o.SubAssembly).
                                        OrderBy(Function(o) o.ComponentAssembly).
                                        OrderBy(Function(o) o.BusinessTest).
                                        OrderBy(Function(o) o.FailureID)

        Return View(model)

    End Function
4

1 回答 1

7

如果要按多个条件对数据进行排序,则必须OrderBy仅用于第一个条件。对于下一个,您应该使用ThenBy

    Dim model = From fails In data.Where(Function(w) w.FixedByID.Equals(0)).
                                    OrderBy(Function(o) o.MajorAssembly).
                                    ThenBy(Function(o) o.SubAssembly).
                                    ThenBy(Function(o) o.ComponentAssembly).
                                    ThenBy(Function(o) o.BusinessTest).
                                    ThenBy(Function(o) o.FailureID)

如果您OrderBy每次都使用,它会“忘记”之前的订单并完全按照后续标准重新排序,而忽略之前的订单。

顺便说一句,这From fails In部分没用;以下语句具有相同的含义:

    Dim model = data.Where(Function(w) w.FixedByID.Equals(0)).
                    OrderBy(Function(o) o.MajorAssembly).
                    ThenBy(Function(o) o.SubAssembly).
                    ThenBy(Function(o) o.ComponentAssembly).
                    ThenBy(Function(o) o.BusinessTest).
                    ThenBy(Function(o) o.FailureID)
于 2012-08-15T13:31:15.543 回答