seleziona il top 5 nel framework di entity framework

io ho

[Person] PersonID, EmailAddress, FirstName, LastName [OnlineAccount] OnlineAccountID, PersonID, Nickname 

Ogni persona può avere 0- * OnlineAccount.

In Entity Framework con C #, come seleziono la Top 5 Persona con il maggior numero di account?

Prova questo:

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

Questo restituisce IQueryable . Non restituisce ancora risultati, perché implementa l’esecuzione differita. Sarà tradotto in SQL ed eseguito quando necessario:

 var metarializedItems = items.ToList(); // ToList forces execution 

o

 foreach(var item in items) // foreach forces execution 

L’esempio sopra verrà tradotto in SQL simile a questo:

 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 

Non sarà esattamente questo SQL. Diverse versioni di EF possono produrre SQL differenti, ma l’ho scritto per illustrare come funziona. Take(5) è tradotto in TOP 5 . OrderByDescending(u => u.OnlineAccounts.Count) viene OrderByDescending(u => u.OnlineAccounts.Count) in ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC . Questo è il potere di Entity Framework. Traduce le espressioni .NET in SQL.