2012-06-22 2 views
9

Ho una lista di entità che contengono alcuni campi come altre entità.Elenco delle entità da datare

Es.

MyEntity 
Int id 
ContactEntity Contact -> contactId, Name etc… 
AddressEntity Address 

così ho List< MyEntity> che deve essere convertito in una tabella di dati. Ma dalle sub entità voglio selezionare solo un campo.

È possibile o ho altra alternativa.

UPDATE

Quando provo CopyToDataTable() come ivowiblo descrive mi dà errore seguente

The type 'AnonymousType#1' cannot be used as type parameter 'T' in the generic type or 
method 'System.Data.DataTableExtensions.CopyToDataTable<T>(System.Collections.Generic.IEnumerable<T>)'. 
There is no implicit reference conversion from 'AnonymousType#1' to 'System.Data.DataRow'. 

risposta

14

In http://msdn.microsoft.com/en-us/library/bb669096.aspx spiegano come implementare un metodo CopyToDataTable() che non richiede che il tipo sia un DataRow per lavorare con, ad esempio, entità.

Basta creare una query che restituisce lo schema desiderato e utilizzare il metodo CopyToDataTable():

var table = entities.Select(x => new { 
             x.Id, 
             Contact = x.Contact.Name, 
             Address = x.Address.Address 
             }).CopyToDataTable(); 

L'unico problema con questa soluzione è che utilizza la riflessione e può colpire le prestazioni, a seconda del carico di voi applicazione . Se è necessario evitare di riflessione, è necessario creare un metodo che crea esplicitamente la DataTable da voi entità:

var table = new DataTable(); 

table.Columns.Add("Id", typeof(int)) 
table.Columns.Add("Contact", typeof(string)) 
table.Columns.Add("Address", typeof(string)) 

foreach(var entity in entities) { 
    var row = table.NewRow(); 
    row["Id"] = entity.Id; 
    row["Contact"] = entity.Contact.Name; 
    row["Address"] = entity.Address.Address; 
    table.Rows.Add(row); 
} 
0

Prova questo codice (con funzione di CopyToDataTable):

var query = .... 
DataTable dataTable = query.CopyToDataTable(); 
+1

Sì, ho visto il ** http: //msdn.microsoft.com/en-us /library/bb669096.aspx**, il problema è che ho sotto entità all'interno dell'entità e ho solo bisogno di estrarne una archiviata da quelle –