2012-06-22 17 views
9

Tôi có một danh sách các thực thể có chứa một số trường của nó như các thực thể khác.Danh sách các thực thể để có thể định cấu hình

Ví dụ:

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

Vì vậy, tôi cần chuyển đổi sang bảng dữ liệu. Nhưng từ các thực thể con, tôi chỉ muốn một trường được chọn.

Có thể hoặc tôi có bất kỳ giải pháp thay thế nào khác.

CẬP NHẬT

Khi tôi cố gắng CopyToDataTable() như ivowiblo mô tả nó mang lại cho tôi lỗi sau

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

Trả lời

14

Trong http://msdn.microsoft.com/en-us/library/bb669096.aspx chúng giải thích cách triển khai phương thức CopyToDataTable() không cần loại DataRow để làm việc với, ví dụ, các thực thể.

Chỉ cần tạo một truy vấn mà trả về schema mong muốn và sử dụng phương pháp CopyToDataTable():

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

Vấn đề duy nhất với giải pháp này là nó sử dụng phản xạ và nó có thể đạt hiệu suất, tùy thuộc vào tải của bạn ứng dụng . Nếu bạn cần tránh phản ánh, bạn sẽ cần phải tạo phương thức tạo rõ ràng DataTable từ các thực thể của bạn:

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

Hãy thử mã này (với chức năng CopyToDataTable):

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

Có, tôi đã thấy ** http: //msdn.microsoft.com/en-us /library/bb669096.aspx**, vấn đề là tôi có các thực thể con trong thực thể và tôi chỉ cần trích xuất một tệp từ các thực thể đó –

Các vấn đề liên quan