Tôi có câu lệnh SQL dưới đây hoạt động như mong muốn/mong đợi. Tuy nhiên tôi muốn dịch nó thành một câu lệnh LINQ (Lambda ??) để nó phù hợp với phần còn lại của DAL của tôi. Tuy nhiên tôi không thể nhìn thấy để tìm ra cách để mô phỏng Rank() trong LINQ.Chuyển đổi xếp hạng SQL() thành LINQ, hoặc thay thế
Lý do tôi đăng nó ở đây, có thể do lỗi, là để xem liệu có ai thay thế câu lệnh Rank()
để tôi có thể chuyển đổi điều này không. Ngoài ra, nếu có một cách để đại diện cho Rank()
trong LINQ cũng sẽ được đánh giá cao.
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())
)
@closer: quá cục bộ? –
Tôi đã nghĩ rằng có lẽ tôi nên làm lại điều này để chỉ đơn giản là hỏi làm thế nào để yếu tố ra các Sub-Chọn với Rank(). Điều đó có tạo ra một câu hỏi hay hơn không? –
Bạn có thể sử dụng chế độ xem với mệnh đề xếp hạng - đang chờ người khác biết nếu có thể với LINQ thô. –