2012-06-22 11 views
9

Mam listę podmiotów, które zawierają niektóre z tych pól jako inne podmioty.Lista jednostek do datowalnych

Np.

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

Tak więc mam List< MyEntity>, który musi zostać przekonwertowany na tabelę danych. Ale z podelementów chcę wybrać tylko jedno pole.

Czy to możliwe, czy też mam inną alternatywę.

UPDATE

Kiedy próbuję CopyToDataTable() jak ivowiblo opisuje to daje mi następujący błąd

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

Odpowiedz

14

In http://msdn.microsoft.com/en-us/library/bb669096.aspx wyjaśniają, jak zaimplementować metodę CopyToDataTable(), która nie wymaga, aby typ był DataRow do pracy z, na przykład, encjami.

Wystarczy utworzyć kwerendę, która zwraca żądaną schematu i używać CopyToDataTable() metody:

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

Jedynym problemem z tego rozwiązania jest to, że wykorzystuje odbicia i może uderzyć wydajności, w zależności od obciążenia z was aplikacji . Jeśli chcesz uniknąć refleksji, trzeba będzie stworzyć metodę, która wyraźnie tworzy DataTable z was podmiotów:

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

Spróbuj tego kodu (z funkcją CopyToDataTable):

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

Tak, widziałem ** http: //msdn.microsoft.com/en-us /library/bb669096.aspx**, problem polega na tym, że mam podległe jednostki wewnątrz jednostki i muszę tylko wyodrębnić jedną z nich –