加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 到datatable的实体列表

发布时间:2020-12-15 04:10:05 所属栏目:百科 来源:网络整理
导读:我有一个实体列表,其中包含其中一些字段作为其他实体. 例如. MyEntityInt idContactEntity Contact - contactId,Name etc…AddressEntity Address 所以我有List myEntity所需要将其转换为数据表.但是从子实体我只需要选择一个字段. 是可能还是有其他选择. UP
我有一个实体列表,其中包含其中一些字段作为其他实体.

例如.

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

所以我有List< myEntity所>需要将其转换为数据表.但是从子实体我只需要选择一个字段. 是可能还是有其他选择. UPDATE 当我尝试CopyToDataTable()作为ivowiblo描述它给我以下错误

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

解决方法

在 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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读