如何将类型化的DataTable转换为实体列表?

问题描述:

我需要将Typed DataTable的数据转换为我的实体列表。我用DataTable的字段映射了实体的所有字段。如何将类型化的DataTable转换为实体列表?

任何想法?

+2

喜欢的东西http://*.com/questions/441023/fastest-way-to-convert-datatable-to-泛型列表?虽然我应该强调,从微型ORM开始,而不是数据表更高效 – 2011-05-02 11:39:17

的一种方法是通过自定义代码 做让想你的实体类名称为 'MyEnt'

public class MyEnt 
    { 
    public string Name {get; set;} 
    public string Type {get; set;} 
    public LoadMyEnt(object [] array) 
     { 
     this.Name = array[0].ToString(); 
     this.Type = array[1].ToString(); 
     } 
    } 

的数据表//你可以做

List<MyEnt> list = new List<MyEnt>(); 
foreach(DataRow dr in table.Rows) 
{ 
    MyEnt obj = new MyEnt(); 
obj.Load(dr.ItemArray); 
list.Add(obj); 
} 
+0

看起来像公平的方法,谢谢 – 2011-05-02 13:45:40

+0

好的谢谢 – Lijo 2014-08-05 15:06:55

我会检查出AutoMapper这是一个伟大的工具,专注于这种情况。

另外here是那个已经完成了你的场景的人。

希望这有帮助!

您可以先将其转换为通用数据表,然后将该数据表转换为列表。
有很多代码片段可用于将通用数据表转换为列表。有些是:
How do you convert a DataTable into a generic list?
Convert DataTable to List<T>
Fastest way to convert datatable to generic list

你可以写一个扩展方法:

public static List<TItem> Cast<TItem>(this DataRowCollection drc, Func<DataRow, TItem> converter) 
    { 
     List<TItem> list= new List<TItem>(); 
     foreach (DataRow row in drc) 
     { 
      list.Add(converter(row)); 
     } 
     return list; 
    } 

其中转换器是例如,含有下列lambda表达式:

item => new YourClass(item) 

谢谢,

丹尼斯