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.