Versuche dies:
var items = context.PersonSet.OrderByDescending(u => u.OnlineAccounts.Count).Take(5);
Dies kehrt zurück IQueryable<Person>
. Es werden noch keine Ergebnisse zurückgegeben, da die verzögerte Ausführung implementiert wird. Es wird in SQL übersetzt und bei Bedarf ausgeführt:
var metarializedItems = items.ToList();
oder
foreach(var item in items)
Das obige Beispiel übersetzt in SQL ähnlich diesem:
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
Es wird nicht genau diese SQL sein. Unterschiedliche EF-Versionen können unterschiedliche SQLs erzeugen, aber ich habe sie geschrieben, um die Funktionsweise zu veranschaulichen. Take(5)
wird übersetzt in TOP 5
. OrderByDescending(u => u.OnlineAccounts.Count)
wird übersetzt in ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC
. Dies ist die Kraft von Entity Framework. Es übersetzt .NET-Ausdrücke in SQL.
SELECT TOP 5...
Abfrage für die Datenbank enden ?