2012-06-22 7 views
9

私は、他のエンティティとしてそのフィールドのいくつかを含むエンティティのリストを持っています。データテーブルへのエンティティのリスト

例:

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

だから私はList< MyEntity>をデータテーブルに変換する必要があります。しかし、サブエンティティからは、1つのフィールドだけを選択します。

他の方法もありますか?

UPDATE

私はCopyToDataTableを(してみてください) ivowibloはそれが(CopyToDataTable機能付き)このコードを試してみてください私に次のエラー

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

答えて

14

http://msdn.microsoft.com/en-us/library/bb669096.aspxは、タイプがエンティティなどの処理に使用するDataRowでなければならないCopyToDataTable()メソッドを実装する方法を説明しています。

だけCopyToDataTable()方法を希望スキーマを返すクエリを作成して使用します。

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

このソリューションの唯一の問題は、それがリフレクションを使用し、それはあなたのアプリケーションの負荷に応じて、パフォーマンスを打つかもしれないということです。リフレクションを避ける必要がある場合は、エンティティからDataTableを明示的に作成するメソッドを作成する必要があります。

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

を与える説明として:

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

ありがとうございました** http://msdn.microsoft.com/en-us /library/bb669096.aspx**、問題はエンティティ内にサブエンティティがあることです –

関連する問題