2012-06-22 9 views
9

Tengo una lista de entidades que contienen algunos de estos campos como otras entidades.Lista de entidades para la tabla de datos

Por ejemplo.

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

Así que tienen List< MyEntity> que necesita ser convertido a una tabla de datos. Pero desde las subentidades quiero que solo se seleccione un campo.

¿Es posible o tengo otra alternativa?

ACTUALIZACIÓN

Cuando intento CopyToDataTable() como ivowiblo describe me da error de seguimiento

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'. 

Respuesta

14

En http://msdn.microsoft.com/en-us/library/bb669096.aspx explican cómo implementar un método CopyToDataTable() que no necesita el tipo para ser un DataRow para trabajar con, por ejemplo, entidades.

Basta con crear una consulta que devuelve el esquema deseado y utilizar CopyToDataTable() método:

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

El único problema con esta solución es que utiliza la reflexión y puede golpear el rendimiento, dependiendo de la carga de ustedes aplicación . Si usted necesita para evitar la reflexión, tendrá que crear un método que crea explícitamente la DataTable de ustedes entidades:

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

Prueba este código (con función CopyToDataTable):

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

Sí, he visto el ** http: //msdn.microsoft.com/en-us /library/bb669096.aspx**, el problema es que tengo subentidades dentro de la entidad y solo necesito extraer una archivada de esas –

Cuestiones relacionadas