11

他のエンティティとしていくつかのフィールドを含むエンティティのリストがあります。

例えば。

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

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

それは可能ですか、それとも他の選択肢がありますか?

アップデート

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

2 に答える 2

18

http://msdn.microsoft.com/en-us/library/bb669096.aspxで、CopyToDataTable()エンティティなどを操作するために型をDataRowにする必要のないメソッドを実装する方法について説明しています。

目的のスキーマを返すクエリを作成し、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);
}
于 2012-06-22T12:38:07.673 に答える
0

このコードを試してください(CopyToDataTable関数を使用)。

var query = ....
DataTable dataTable = query.CopyToDataTable();
于 2012-06-22T12:36:55.283 に答える