130 likes | 240 Views
Compiled Queries : LINQ-Abfragen mit Pegasus-Stiefeln. Gordon Breuer IT Consultant & Software Engineer Travel & Logistics. Die Inhalte. Wo / Wie entsteht das Problem. Wo und wie entsteht der Performance-Engpass?. IEnumerable < Customer > linq = from customer in db. Customer
E N D
CompiledQueries: LINQ-Abfragen mit Pegasus-Stiefeln Gordon Breuer IT Consultant & Software Engineer Travel & Logistics
Wo und wie entsteht der Performance-Engpass? • IEnumerable<Customer> linq = fromcustomerindb.Customer • wherecustomer.LastName.StartsWith("B") • selectcustomer; IQueryable<Customer> lambda = db.Customer.Where(customer => customer.LastName.StartsWith("B")); Magic Expression<Func<Customer, bool>> bedingung = s => s.LastName.StartsWith("B"); IQueryable<Customer> lambda = db.Customer.Where(bedingung); SELECT * FROM Customer WHERE LastName = 'B%'
Wo und wie entsteht der Performance-Engpass? • IEnumerable<Customer> linq = fromcustomerindb.Customer • wherecustomer.LastName.StartsWith("B") • selectcustomer; IQueryable<Customer> lambda = db.Customer.Where(customer => customer.LastName.StartsWith("B")); Expression<Func<Customer, bool>> bedingung = s => s.LastName.StartsWith("B"); IQueryable<Customer> lambda = db.Customer.Where(bedingung); SELECT * FROM Customer WHERE LastName = 'B%'
CompiledQueries • Verfügbar seit .NET 3.5 • Namensraum System.Data.Linq • Statische Klasse CompiledQuery • Compile<TArg0, …, TResult>(Expression<Func<TArg0, …, TResult>>)
CompiledQueries • 1. Parameter = Objekt-Kontext für den Datenzugriff • Letzter Parameter (n) = Rückgabewert • 2. - (n-1). Parameter = Optionale Übergabeparameter • In .NET 3.5 und Silverlight: Überladungen für bis zu drei Übergabeparameter • In .NET 4.0+: Überladungen für bis zu 15 Übergabeparameter • Sollten mehr gebraucht werden: Helferklasse
Instanzen vs. Statische Klassen • Aufruf in instanziierten Klassen? • Statischer Kontext!
Tipps zur Verwendung • Alle CompiledQueries in einer eigenen statischen Klasse sammeln • Es muss immer der gleiche Data-Kontext verwendet werden • Das zurückgegebene one-time Enumerable in eine Liste umwandeln
eure msgsystemsag Robert-Bürkle-Straße 1 85737 Ismaning/München Telefon: +49 89 96101-0 Fax: +49 89 96101-1113 info@msg-systems.com www.msg-systems.com Gordon Breuer IT Consultant // Software Engineer Telefon: +49 160 9091 5143 E-Mail: gordon.breuer@msg-systems.de Twitter: @anheledir Facebook: http://facebook.com/gordon.breuer Blog: http://gordon-breuer.de