Ho avuto un po' di tempo per fare alcune aggiunte alla libreria che ora è disponibile nel lab.
Ho aggiunto una classe DTOCopy<Tsource,TTarget> che mi permette di memorizzare attraverso un membro statico le proprietà che hanno in comune due classi. L'uso di una classe generica mi permette di avere un meccanismo automatico di cache in funzione delle classi che fanno da source e da target. Lo scopo è creare un extension method CopyTo per copiare i valori da una classe ad un'altra, utile nei DTO:
public class ProductDTO { public ProductDTO() { } public ProductDTO(Product source) { // Copia solo le proprietà che hanno in comune source.CopyTo(this); } public string Description { get; set; } }
Un secondo extension method invece permette di creare un expression linq per un object initializer di una classe DTO. Siccome mi capita spesso di avere un'entità LINQ to SQL o LINQ to Entities e nell'espressione LINQ voglio avere come risultato una classe DTO, mi son fatto un extension method che mi evita di elencare tutte le proprietà da travasare:
// Espressione LINQ per DTO IQueryable<Product,ProductDTO> products = new Product[] { new Product { Description = "ppp" } }.AsQueryable(); IEnumerable<ProductDTO> productsDTO = products.SelectDTO<Product,ProductDTO>();
Decisamente comodo :-)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Dettagli sul metodo SelectDTO, il 26 aprile 2009 alle 13:58
- 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