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
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Change tracking e composition in Entity Framework
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste