반응형
마더 프레임 워크에서 상위 5 개 선택
나는 가지고있다
[Person]
PersonID, EmailAddress, FirstName, LastName
[OnlineAccount]
OnlineAccountID, PersonID, Nickname
각 개인은 0- * OnlineAccount를 사용할 수 있습니다.
C #을 사용하는 엔터티 프레임 워크에서 계정이 가장 많은 상위 5 명을 어떻게 선택합니까?
이 시도 :
var items = context.PersonSet.OrderByDescending(u => u.OnlineAccounts.Count).Take(5);
이것은 반환합니다 IQueryable<Person>
. 지연된 실행을 구현하기 때문에 아직 결과를 반환하지 않습니다. SQL로 변환되어 필요할 때 실행됩니다.
var metarializedItems = items.ToList(); // ToList forces execution
또는
foreach(var item in items) // foreach forces execution
위의 예는 다음과 같은 SQL로 변환됩니다.
SELECT TOP 5 p.PersonID, p.EmailAddress, p.FirstName, p.LastName
FROM Person p
ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC
이 정확한 SQL은 아닙니다. EF 버전은 다른 SQL을 생성 할 수 있도록 작동 방식을 설명하기 위해 작성했습니다. Take(5)
로 번역 TOP 5
됩니다. OrderByDescending(u => u.OnlineAccounts.Count)
로 번역 ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC
됩니다. 이것이 Entity Framework의 힘입니다. .NET 저장을 SQL로 변환합니다.
참고 URL : https://stackoverflow.com/questions/2656576/select-top-5-in-entity-framework
반응형
'ProgramingTip' 카테고리의 다른 글
Java 메모리에서 모니터링하는 방법은 무엇입니까? (0) | 2020.12.07 |
---|---|
해당하는 Maven 2 어셈블리 : "시스템"범위의 jar가 포함되지 않음 (0) | 2020.12.07 |
어디까지입니까? (0) | 2020.12.07 |
extern은 C #에서 어떻게 작동 작동? (0) | 2020.12.07 |
고정 된 시간 간격마다 작업을 반복적으로 실행하는 방법 (0) | 2020.12.07 |