2012-06-22 10 views
9

Ich habe eine Liste von Entitäten, die einige Felder als andere Entitäten enthalten.Liste von Entitäten zu Datentabelle

Eg.

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

So habe ich List< MyEntity> was zu einer Datentabelle umgewandelt werden muss. Aber von den Untereinheiten möchte ich nur ein Feld auswählen.

Ist es möglich oder habe ich eine andere Alternative?

UPDATE

Wenn ich versuche, CopyToDataTable() als ivowiblo beschreibt es gibt mir folgende Fehler

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

Antwort

14

In http://msdn.microsoft.com/en-us/library/bb669096.aspx erklären sie, wie man eine CopyToDataTable() Methode implementiert, die den Typ nicht benötigt, um eine DataRow für die Arbeit mit zum Beispiel Entitäten zu sein.

Erstellen Sie einfach eine Abfrage, die das gewünschte Schema zurückgibt und verwenden CopyToDataTable() Methode:

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

Das einzige Problem mit dieser Lösung ist, dass es Reflexion verwendet und es kann die Leistung getroffen, auf die Last von Ihnen je nach Anwendung . Wenn Sie Reflexion vermeiden können, benötigen Sie eine Methode erstellen, die explizit die Datentabelle von Ihnen Entitäten erstellt:

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

diesen Code Versuchen (mit CopyToDataTable Funktion):

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

Ja, ich habe das gesehen ** http: //msdn.microsoft.com/en-us /library/bb669096.aspx**, Problem ist, dass ich Sub-Entitäten innerhalb der Entität habe und nur ein Feld von diesen extrahieren muss –

Verwandte Themen