首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DataTable to List <T>转换

您好!您的问题是关于将 DataTable 转换为 List<T> 的问题。

在 C# 中,可以使用 LINQ 技术将 DataTable 转换为 List<T>。以下是一个示例代码:

代码语言:csharp
复制
using System.Data;
using System.Linq;

public static List<T> DataTableToList<T>(DataTable table)
{
    List<T> list = new List<T>();

    foreach (DataRow row in table.Rows)
    {
        T item = GetItem<T>(row);
        list.Add(item);
    }

    return list;
}

private static T GetItem<T>(DataRow row)
{
    Type type = typeof(T);
    T item = Activator.CreateInstance<T>();
    foreach (DataColumn column in row.Table.Columns)
    {
        PropertyInfo property = type.GetProperty(column.ColumnName);
        if (property != null && row[column] != DBNull.Value)
        {
            property.SetValue(item, row[column], null);
        }
    }
    return item;
}

在这个示例中,我们定义了一个泛型方法 DataTableToList<T>,它接受一个 DataTable 参数,并返回一个 List<T> 类型的结果。在方法中,我们遍历 DataTable 中的每一行,并使用 GetItem<T> 方法将每一行转换为对应的 T 类型的对象,并将其添加到 List<T> 中。最后,我们返回 List<T> 作为结果。

GetItem<T> 方法用于将 DataRow 转换为对应的 T 类型的对象。在方法中,我们首先获取 T 类型的 PropertyInfo 对象,然后将 DataRow 中的每一列的值设置到对应的属性中。最后,我们返回 T 类型的对象。

需要注意的是,在使用这个方法时,需要确保 DataTable 中的列名和 T 类型的属性名称相同,否则无法正确转换。

希望这个答案能够帮助您解决问题!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# DataTable 转换成List

运用泛型和反射实现的转换,很给力。代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质。可以直接复制粘贴进行调用哦。...public class DtConverToListT> where T : new() {     public static ListT> DtToList(DataTable dt)     ...{         //定义集合         ListT> ListCollection = new ListT>(dt.Rows.Count);         //获得 T 模型类型         ...();         //临时变量,存储变量模型公共属性Name         string Tempname = "";         //遍历参数 DataTable的每行         foreach...//取出类属性之一                 Tempname = P.Name;                 //判断DataTable中是否有此列                 if (

2K10
  • C#中DataTable转化为List解析

    在.net项目中使用到DataTable和ListT>集合的地方较多, 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。...当涉及到两者之间的转换时,就显得有些较为繁琐。这个其中的问题主要在两者的存储方式,DataTable的存储方式采用一种二维表的方式进行数据的存储操作,DataTable表示内存中数据的一个表。...在List集合中,List的本质就是一个数组,则采用一种线性结构对数据进行存储。     在转换过程中,主要的问题在于不同类型的处理上,主要分为值类型和引用类型两大类。        ...转换为ListT>集合 /// /// T"> /// /// public static ListT> DataTableToListT>(DataTable

    2.4K90

    DataTable,List去重复记录的方法

    今天一位朋友问如何去掉DataTable里重复的记录(DataTable是别人返回过来的,不能再重新查询数据库,所以无法用sql中的select distinct xxx处理,只能在DataTable上动脑筋...)  思路:将DataTable转成IEnumerable,然后就能调用Distinct方法了 by 菩提树下的杨过 using System.Collections.Generic;  using ...ConsoleApplication2  {  class Program      {  static void Main(string[] args)          {              DataTable... tbl = new DataTable();              tbl.Columns.Add("Id", typeof(System.Int32));              tbl.Columns.Add...中"城市名"重复的记录去掉了,以上代码同样适用于ListT>(只要改下"比较器"即可)

    1.9K100

    int8_t、int16_t、int32_t转换

    大家好,又见面了,我是你们的朋友全栈君 文件中有四个字符 abcd 以int32_t读入只有1个数: 1684234849 转为二进制:1100100011000110110001001100001...每8位分隔(最前面补了个0):01100100、01100011、01100010、01100001 转十进制:100、99、98、97,即 dcba 可以看到第一个字符在最低位 int8_t(1684234849...) 截取最低8位,得到97,即 a int8_t(1684234849>>8) 向右移动8位后截取最低8位,得到98,即 b 转int16_t 同理。...反之,如果将int32_t数字写入文件:1684234849 以int8_t读出,会依次读到97、98、99、100,即abcd int8_t 还原为int32_t: int32_t(int32_t(100...) t(99) t(98) t(97)) 结果为1684234849 发布者:全栈程序员栈长,转载请注明出处:https

    2.5K20
    领券