`
wyf
  • 浏览: 433306 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

扩展方法(1) DataTable 和List 相互转换

 
阅读更多

public static class DataTableExtensions
    {

        /// <summary>
        /// DataTable 转换为List 集合
        /// </summary>
        /// <typeparam name="TResult">类型</typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class,new()  
        {
            //创建一个属性的列表
            List<PropertyInfo> prlist = new List<PropertyInfo>();
            //获取TResult的类型实例  反射的入口
            Type t = typeof(TResult);
            //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 
            Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });
            //创建返回的集合
            List<TResult> oblist = new List<TResult>();
            
            foreach (DataRow row in dt.Rows)
            {
                //创建TResult的实例
                TResult ob = new TResult();
                //找到对应的数据  并赋值
                prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
                //放入到返回的集合中.
                oblist.Add(ob);
            }
            return oblist;
        }
    }
/// <summary>
        /// 转换为一个DataTable
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value) where TResult : class
        {
            //创建属性的集合
            List<PropertyInfo> pList = new List<PropertyInfo>();
            //获得反射的入口
            Type type = typeof(TResult);
            DataTable dt = new DataTable();
            //把所有的public属性加入到集合 并添加DataTable的列
            Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p);dt.Columns.Add(p.Name, p.PropertyType); });      
            foreach (var item in value)
            {
                //创建一个DataRow实例
                DataRow row = dt.NewRow();
                //给row 赋值
                pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
                //加入到DataTable
                dt.Rows.Add(row);
            }
            return dt;
        }
    }
 
分享到:
评论

相关推荐

    DataTable 和List 相互转换

    在给定的部分内容中,通过扩展方法`ToList&lt;TResult&gt;`实现了`DataTable`到`List&lt;TResult&gt;`的转换。该方法首先收集所有`TResult`类型的公共属性信息,然后检查这些属性是否在`DataTable`中存在对应的列名。接着,对于`...

    list转换为dataTable

    通过以上内容可以看出,将List转换为DataTable不仅可以提高数据处理的灵活性,还可以方便地利用DataTable提供的强大功能来满足更多的业务需求。当然,在实际开发过程中还需要根据具体的应用场景来选择合适的数据结构...

    DataTable与实体类互相转换

    总之,DataTable与实体类的转换在.NET开发中是常见的需求,通过泛型类和方法可以实现这种转换的自动化,降低开发复杂度。了解并熟练掌握这一技巧,对于提升.NET开发效率和代码质量具有重要意义。

    DataTable2List.cs

    DataTabe与list相互转换 扩展方法

    C#中将DataTable转化成List&lt;T&gt;的方法解析

    1. 值类型:值类型在转换时可以直接赋值,但需要注意类型匹配,例如DataTable中的数据可能是int,而List中的T可能是long。在这种情况下,可能需要进行类型转换。 2. 引用类型:对于引用类型,特别是自定义的类,...

    C#将DataTable转换成list的方法

    分页查询的实现利用了`Skip()`和`Take()`两个LINQ扩展方法。`Skip()`方法跳过指定数量的元素,`Take()`方法获取之后的指定数量的元素。例如,如果当前页是第`pageIndex`页,那么我们首先跳过`(pageIndex - 1)`页的...

    C#实现DataTable转换成IList的方法

    在C#编程中,将`DataTable`转换为`IList&lt;T&gt;`可以极大地方便我们对数据的操作和处理,因为`IList&lt;T&gt;`是强类型的数据集合,它允许我们以对象的方式进行操作,而不是通过索引访问。下面我们将详细介绍如何实现这个转换...

    JQuery DataTable Servlet

    在Servlet中,我们需要重写`doGet()`或`doPost()`方法来接收和处理DataTables的请求。请求参数通常包含排序、过滤和分页信息。根据这些参数,Servlet从数据库中获取对应的数据,然后以JSON格式返回。 ```java ...

    wpf datagrid 单元格颜色 根据datatable动态显示datagrid内容

    DataGrid控件允许我们将数据绑定到各种数据源,如ObservableCollection、List或如本例中的DataTable。在WPF中,数据绑定是核心特性之一,它使得UI与数据模型之间可以自动同步。对于一个简单的例子,我们可以将...

    C#中DataTable 转实体实例详解

    以下是一个使用反射将DataTable转换为List的扩展方法: ```csharp public static List&lt;T&gt; ToList(this DataTable dt) where T : class, new() { List&lt;T&gt; collection = new List(); PropertyInfo[] pInfos = ...

    .Net core下直接执行SQL语句并生成DataTable的实现方法

    首先,由于EF Core主要设计为返回强类型的结果集,例如使用IQueryable或者ToList()方法返回具体的实体列表,因此无法直接返回DataTable或DataSet这些.NET Framework中的弱类型数据集合。这一设计选择导致在.NET Core...

    table行列数据转换

    C#作为广泛使用的编程语言,提供了丰富的库和方法来处理这类问题。本篇文章将详细探讨“table动态行列数据转换”这一主题,帮助C#开发者理解和掌握如何在代码中实现数据的行列转换,从而避免过度依赖SQL语句。 首先...

    C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    同样,字符串`json`被扩展出了`ToJson`和`ToList&lt;User&gt;`方法,可以分别将它转换为对象和`User`类型的列表。此外,`json.ToTable()`将字符串转换为`DataTable`对象。 扩展方法的一个显著优点是提高了代码的可读性和...

    C#、ASP.NET通用扩展工具类之TypeParse

    本篇文章关注的是一个名为`TypeParseExtenions`的通用扩展工具类,它包含了一系列用于不同类型转换的方法,如`TryToInt`、`TryToMoney`、`TryToDecimal`、`TryToDate`以及JSON和Model之间的转换,还有List与...

    C# Excel导入导出,基于NOPI(兼容xls和xlsx)

    // 自定义扩展方法,将工作表转换为DataTable List&lt;MyType&gt; dataList = dataTable.AsEnumerable().Select(row =&gt; new MyType { Column1 = row.Field("Column1"), Column2 = row.Field("Column2") // ... }).To...

    C#中任意类型数据转成JSON格式

    对于DataTable,可以创建一个DataTable的扩展方法,遍历其Columns和Rows,将每一列的名称和对应行的值组合成JSON对象。对于DataReader,由于它是一个只读的枚举器,需要在读取数据时动态构建JSON。对于DataSet,由于...

    JSON And XML Tools

    5. **XML到DataSet/DataTable转换**:对于需要与数据库交互的情况,工具可能提供了将XML数据转化为DataSet或DataTable的方法。 这些工具类极大地提高了开发效率,减少了手动处理JSON和XML的复杂性。它们将常见的...

    DataTable映射器的通用集合

    4. **高性能扩展**:这里提到的高性能扩展可能是指实现了一种优化的方法,能够在处理大量数据时快速有效地将集合转换为DataTable,可能通过避免不必要的内存分配、减少循环次数或者使用缓存等方式实现。 5. **...

    Json帮助类.rar

    DataTable在.NET中是用于存储和操作表格数据的数据结构,可以使用Json.NET的JsonConvert.SerializeDataTable方法,如果未直接提供,可以扩展JsonConvert类添加此方法: ```csharp public static string ...

    ORM及代码生成器和插件C#源码(DBFrameworkV4.5.3)

    1、数据表、视图和存储过程与对象之间的转换。 2、数据表、视图的自定义条件查询。 3、数据表、视图的分页查询。 4、根据ID、主键或自定义条件对数据表进行增、删、改操作。 5、实现一对一、一对多、多对一和多对多...

Global site tag (gtag.js) - Google Analytics