ich habe
[Person]
PersonID, EmailAddress, FirstName, LastName
[OnlineAccount]
OnlineAccountID, PersonID, Nickname
Jede Person darf 0- * OnlineAccount haben.
Wie wähle ich im Entity Framework mit C # die Top 5 Person mit den meisten Konten aus?
ich habe
[Person]
PersonID, EmailAddress, FirstName, LastName
[OnlineAccount]
OnlineAccountID, PersonID, Nickname
Jede Person darf 0- * OnlineAccount haben.
Wie wähle ich im Entity Framework mit C # die Top 5 Person mit den meisten Konten aus?
Antworten:
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(); // ToList forces execution
oder
foreach(var item in items) // foreach forces execution
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 ?