ProgramingTip

마더 프레임 워크에서 상위 5 개 선택

bestdevel 2020. 12. 7. 20:30
반응형

마더 프레임 워크에서 상위 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

반응형