[SQL] LINQ에 SQL 순위 () 변환, 또는 대체
SQLLINQ에 SQL 순위 () 변환, 또는 대체
나는 같은 작품이 요구 / 기대하는 SQL 아래 문이있다. 그러나 나는 내 DAL의 나머지 부분과 맞 있도록 LINQ 문 (람다 ??)로 번역하고 싶습니다. 그러나 나는 LINQ의 순위 ()를 시뮬레이션하는 방법을 알아 내기 위해 볼 수 없습니다.
오류가 어쩌면이다 내가 여기에 게시하는 이유는, 사람이 그렇게 순위 () 문에 대한 대안이 있다면 나는이 전환 얻을 수 있는지입니다. () 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())
)
해결법
-
==============================
1.여기 쇼 내가 Linq에에 순위를 () 시뮬레이션 얼마나하는 샘플입니다 :
여기 쇼 내가 Linq에에 순위를 () 시뮬레이션 얼마나하는 샘플입니다 :
var q = from s in class.student orderby s.Age descending select new { Name = s.name, Rank = (from o in class.student where o.mark > s.mark select o).Count() + 1 };
-
==============================
2.LINQ는하지만 쿼리 구문, 내장 순위 기능이 있습니다. 보통 하나 공급 순위 한 - 사용하는 경우 방법 구문 가장 LINQ의 기능은 두 가지 버전으로 제공됩니다.
LINQ는하지만 쿼리 구문, 내장 순위 기능이 있습니다. 보통 하나 공급 순위 한 - 사용하는 경우 방법 구문 가장 LINQ의 기능은 두 가지 버전으로 제공됩니다.
간단한 예 선택 만 다른 모든 학생, 결과로 생성 된 시퀀스 인덱스를 추가 :
var q = class.student.OrderBy(s => s.studentId).Where((s, i) => i % 2 == 0) .Select((s,i) => new { Name = s.Name, Rank = i }
-
==============================
3.당신이 순위를 시뮬레이션 할 경우에 당신은 LINQ 쿼리를 사용할 수 있습니다.
당신이 순위를 시뮬레이션 할 경우에 당신은 LINQ 쿼리를 사용할 수 있습니다.
var q = (from s in class.student select new { Name = s.Name, Rank = (from o in class.student where o.Mark > s.Mark && o.studentId == s.studentId select o.Mark).Distinct().Count() + 1 }).ToList();
당신은 등으로 순서를 사용할 수 있습니다 :
var q = (from s in class.student orderby s.studentId select new { Name = s.Name, Rank = (from o in class.student where o.Mark > s.Mark && o.studentId == s.studentId select o.Mark).Distinct().Count() + 1 }).ToList();
그러나 명령에 의해이 쿼리에 문제가되지 않습니다.
-
==============================
4.@Totero에서하지만 람다 구현과 답변을 기준으로합니다. 높은 점수는 더 높은 순위를 =.
@Totero에서하지만 람다 구현과 답변을 기준으로합니다. 높은 점수는 더 높은 순위를 =.
var rankedData = data.Select(s => new{ Ranking = data.Count(x => x.Value > s.Value)+1, Name = s.Key, Score = s.Value});
이 입력의 경우 :
{ 100, 100, 98, 97, 97, 97, 91, 50 }
이 출력을 얻을 것이다 :
from https://stackoverflow.com/questions/9873962/converting-sql-rank-to-linq-or-alternative by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클 11g에서 "선택"쿼리에서 오프셋 추가하려면? (0) | 2020.07.07 |
---|---|
[SQL] 관련된 사람없이 모든 레코드 찾기 (0) | 2020.07.07 |
[SQL] 사용 *에 베스트 MySQL의 필드를 많이 호출 할 때? [복제] (0) | 2020.07.07 |
[SQL] MySQL은 "선택은 MAX_JOIN_SIZE 행보다 더 많은 검토 것" (0) | 2020.07.07 |
[SQL] 2008 SQL에 원자 MERGE 문인가? (0) | 2020.07.07 |