выберите лучшие 5 в платформе объекта

Я имею

[Person]
PersonID, EmailAddress, FirstName, LastName

[OnlineAccount]
OnlineAccountID, PersonID, Nickname

Каждому человеку разрешают иметь 0 -* OnlineAccount.

В платформе объекта с C#, как я выбираю лучшие 5 Людей, которые имеют большинство учетных записей?

60
задан fishiefishie 16 April 2010 в 23:17
поделиться

1 ответ

Попробуйте следующее:

var items = context.PersonSet.OrderByDescending(u => u.OnlineAccounts.Count).Take(5);

Это возвращает IQueryable . Он пока не возвращает результатов, потому что реализует отложенное выполнение. Он будет преобразован в 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 (ВЫБРАТЬ СЧЕТЧИК (*) ИЗ OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC . В этом сила Entity Framework. Он переводит выражения .NET в SQL.

135
ответ дан 24 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: