Converter SQL Rank () em LINQ ou alternativa
Tenho a instrução SQL abaixo que funciona como desejado / esperado. No entanto, eu gostaria de traduzi-lo em uma instrução LINQ (Lambda ??) para que ela caiba no resto do meu DAL. No entanto, não consigo descobrir como simular Rank () no LINQ.
A razão pela qual eu publiquei aqui, o que talvez esteja errado, é ver se alguém tem uma alternativa aoRank()
para que eu possa mudar isso. Como alternativa, se houver uma maneira de representarRank()
no LINQ que também seria apreciad
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())
)