Преобразование SQL Rank () в LINQ или альтернативный

У меня есть приведенный ниже оператор SQL, который работает, как хотелось бы / ожидалось. Однако я хотел бы перевести его в оператор LINQ (Lambda ??), чтобы он соответствовал остальной части моего DAL. Однако я не могу понять, как имитировать Rank () в LINQ.

Причина, по которой я разместил ее здесь (возможно, по ошибке), заключается в том, чтобы выяснить, есть ли у кого-нибудь альтернативаRank() заявление, чтобы я мог переключить это. В качестве альтернативы, если есть способ представитьRank() в LINQ это также будет оценено.

USE CMO

SELECT      vp.[PersonID] AS [PersonId]
            ,ce.[EnrollmentID]
            ,vp.[FirstName]
            ,vp.[LastName]
            ,ce.[EnrollmentDate]
            ,ce.[DisenrollmentDate]
            ,wh.WorkerCategory

FROM  [dbo].[vwPersonInfo] AS vp
            INNER JOIN 
            (
                  [dbo].[tblCMOEnrollment] AS ce
                  LEFT OUTER JOIN
                        (
                              SELECT   *
                                          ,RANK()OVER(PARTITION BY EnrollmentID ORDER BY CASE WHEN EndDate IS NULL THEN 1 ELSE 2 END, EndDate DESC, StartDate DESC) AS whrank 
                              FROM  [dbo].[tblWorkerHistory]
                              WHERE WorkerCategory = 2
                        ) AS wh 
                              ON ce.[EnrollmentID] = wh.[EnrollmentID] AND wh.whrank = 1
            ) 
                  ON vp.[PersonID] = ce.[ClientID]

WHERE (vp.LastName NOT IN ('Client','Orientation','Real','Training','Matrix','Second','Not'))
AND (
            (wh.[EndDate] <= GETDATE())
            OR wh.WorkerCategory IS NULL
      ) 
AND (
            (ce.[DisenrollmentDate] IS NULL) 
            OR (ce.[DisenrollmentDate] >= GetDate())
      )

Ответы на вопрос(0)

Ваш ответ на вопрос