Molto spesso ci troviamo nella situazione di dover recuperare i dati di una collection navigation property ma di dover filtrare questi dati. Un tipico esempio di questa situazione è quando vogliamo recuperare una lista di clienti e i loro ultimi 5 ordini. Fino alla versione 3, Entity Framework Core permette di recuperare gli ordini legati ai clienti ma non offre la possibilità di filtrarli in alcun modo. Questo significa che se un cliente ha 500 ordini questi vengono recuperati tutti causando un enorme spreco di risorse.
Entity Framework Core 5 aggiunge la possibilità di utilizzare i metodi LINQ Where, OrderBy, OrderByDescending, ThenBy, ThenDescending, Take e Skip all'interno della lambda del metodo Include così da poter filtrare i record collegati che vengono recuperati.
using (var context = new MyContext()) { var customers = context.Customers .Include(c => c.Orders .Where(o => o.OrderDate <= DateTime.Now.AddMonth(-3)) .OrderByDescending(o => o.Date) .Take(5) ) .ToList(); }
In questa query vengono recuperati tutti i clienti e i relativi ultimi 5 ordini (per data ordine) fatti negli ultimi 3 mesi ordinati. Prima di questa nuova funzionalità, potevamo comuqnue filtrare i dati, ma avremmo dovuto ricorrere a subquery e tipi anonimi complicando notevolmente il codice. Grazie a questa aggiunta, non dobbiamo più ricorrere a simili tecniche con grande risparmio di tempo di sviluppo e anche maggior efficiena a run time.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Rendere le variabili read-only in una pipeline di Azure DevOps
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Creare una libreria CSS universale: Nav menu
Ridurre il reflow ottimizzando il CSS
Gestire codice JavaScript con code splitting e lazy loading
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Ottimizzare le performance usando Span<T> e il metodo Split
Gestione file Javascript in Blazor con .NET 9
Ricevere notifiche sui test con Azure Load Testing
Creare una libreria CSS universale - Rotazione degli elementi
Rendere i propri workflow e le GitHub Action utilizzate più sicure
I più letti di oggi
- Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
- .NET Conference Italia 2025 - Milano
- The Agentic Day - Milano
- Gestione ciclo di vita in .NET Aspire
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!