Vorrei aggiungere alcuni dettagli sul mio post riguardo LINQ to Reflection ed in particolare sull'extension method SelectDTO.
Quello che il metodo fa è creare un expression identica a quello che faremmo scrivendo a mano il mapping. Prendiamo per esempio il classico Northwind e una classe di nome CustomerDTO:
public class CustomerDTO { public string ContactName { get; set; } public string ContactTitle { get; set; } public override string ToString() { return String.Format("{0} {1}", ContactTitle, ContactName); } }
Per caricare la lista dei customer e creare istanze del nostro DTO dovremmo fare:
using (NorthwindEntities ne = new NorthwindEntities()) { IList<customerdto> l = ne.Customers.Select(c => new CustomerDTO { ContactName = c.ContactName, ContactTitle = c.ContactTitle }).ToList(); }
Usando il mio extension method invece:
using (NorthwindEntities ne = new NorthwindEntities()) { IList<CustomerDTO> l = ne.Customers.SelectDTO<Customers, CustomerDTO>().ToList(); }
Ciò che si produce è la medesima Expression del metodo classico, perciò LINQ to Entities la tradurrà nel medesimo modo, scaricando solo le colonne che ci interessano:
SELECT 1 AS [C1], [Extent1].[ContactName] AS [ContactName], [Extent1].[ContactTitle] AS [ContactTitle] FROM [dbo].[Customers] AS [Extent1]
Quello che si paga è solo il prezzo di iniziale di reflection per l'analisi delle proprietà in comune tra le due classi. Ovviamente questo è un inizio, va valutato perché comunque ha un costo, ha il vincolo di dover chiamare le proprietà che si vogliono copiare con lo stesso nome, ma lo si può estendere.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ to Reflection - Parte tre, il 20 aprile 2009 alle 07:08
- Abusi della parola chiave var e poca leggibilità dei generics, il 29 agosto 2008 alle 13:10
- Lambda Expression in Windows Presentation Foundation, il 7 agosto 2008 alle 18:49
- LINQ to reflection - Parte due, il 23 luglio 2008 alle 14:26
- Eccovi LINQ to reflection, il 19 luglio 2008 alle 21:17