Ogni volta che viene eseguita una query usando LINQ To SQL, viene creato l'Expression Tree che attualmente è un'operazione abbastanza lenta. Per ottimizzare le prestazioni, la soluzione migliore è mettere in cache l'expressione tree così che LINQ possa sempre recuperarlo.
Per compilare una query LINQ bisogna utilizzare il metodo Compile della classe System.Data.Linq.CompiledQuery passando in input un'oggetto Func con i parametri da passare alla metodo a cui punta. Mettendo il risultato del metodo Compile in una variabile statica permette di mantenere in memoria la query compilata.
private static Func<NWDataContext, string, IQueryable<Customer>> CustomerById = CompiledQuery.Compile((NWDataContext db, string customerId) => (from c in db.Customers where c.CustomerID == customerId select c));
In questo script si passa in input il DataContext e l'id del cliente e si riceve in output il risultato della query.
Per utilizzare il dato statico basta richiamare la funzione rappresentata dalla variabile statica:
var r = CustomersByCity(new NWDataContext(), "ALFKI"); var c = CustomersByCity(new NWDataContext(), "IEFKR");
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Le novità di Entity Framework Core 5
- Modificare la modalità di esecuzione delle query con Include in Entity Framework Core 5
- Chiamare direttamente un numero di telefono con HTML5
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Esecuzione condizionale dei task nelle pipeline YAML di Azure DevOps