`
net_liu
  • 浏览: 231318 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

List转DataTable(反射)

C# 
阅读更多

List转DataTable(反射)

 

 

/// <summary>
        /// 将集合类转换成DataTable
        /// </summary>
        /// <param name="list">集合</param>
        /// <returns></returns>
        public static DataTable ToDataTable(IList list)
        {
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    result.Columns.Add(pi.Name, pi.PropertyType);
                }

                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }

        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list)
        {
            return ConvertX.ToDataTable<T>(list, null);
        }

        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <param name="propertyName">需要返回的列的列名</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
        {
            List<string> propertyNameList = new List<string>();
            if (propertyName != null)
                propertyNameList.AddRange(propertyName);

            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    if (propertyNameList.Count == 0)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                    else
                    {
                        if (propertyNameList.Contains(pi.Name))
                            result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                }

                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (propertyNameList.Count == 0)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        else
                        {
                            if (propertyNameList.Contains(pi.Name))
                            {
                                object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                        }
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }

分享到:
评论

相关推荐

    DataTable 和List 相互转换

    #### `DataTable`转`List&lt;T&gt;` 在.NET框架中,将`DataTable`转换为`List&lt;T&gt;`通常涉及遍历`DataTable`的每一行,然后创建`T`类型的实例,并将每一列的值映射到相应的属性上。这个过程可以通过反射来实现,但效率较低...

    C# 维数组转换为DataTable 的三个方法

    public static DataTable Convert(string[] ColumnNames, List[]&gt; Arrays) { DataTable dt = new DataTable(); foreach (string columnName in ColumnNames) { dt.Columns.Add(columnName, typeof(string)); }...

    把实体类数组转换为DataTable

    在上述代码中,我们利用了反射API获取`T`类型(这里为`Student`)的所有公共属性,并将其添加为`DataTable`的列。然后,遍历实体数组,将每个实体的属性值填充到新的`DataRow`中,最后将行添加到`DataTable`。 这个...

    C#将DataTable转化为List&lt;T&gt;

    在C#开发中,将DataTable转换为List泛型集合是一个常见的需求,特别是在使用三层架构进行网站开发时,我们可能会从数据访问层获取一个DataTable对象,然后需要将其转换为一个强类型的List集合以便在业务逻辑层或表示...

    .net 将datatable转换为实体类LIST

    将datatable转换为实体类LIST,运用了反射和泛型的技术

    【ASP.NET编程知识】C#将DataTable转化为ListT.docx

    这篇文章主要讲述了如何将DataTable对象转换为List对象,使用反射机制来实现这个功能。下面是详细的知识点: 1. 使用反射机制来获取T对象的所有属性 在将DataTable对象转换为List对象时,需要使用反射机制来获取T...

    DataTable转List

    利用反射和泛型 把Datatable转化为List 1

    C#实现DataTable,List和Json转换的方法

    本文将详细讨论如何使用C#将DataTable、List以及相关的数据结构转换为JSON格式,以便在网络传输或者存储中使用。 首先,让我们看如何将一个DataTable转换为JSON。在.NET框架中,虽然没有内置的直接方法来实现这个...

    c#的datatable转list示例

    在C#编程中,经常需要在不同的数据结构之间进行转换,例如从数据库操作中获取的`DataTable`转换为更方便操作的`List&lt;T&gt;`对象。`DataTable`是.NET框架中用于存储和操作数据的表格型数据结构,而`List&lt;T&gt;`则是一个动态...

    C# DataTable 转换为 实体类对象实例

    在下面的示例代码中,我们将展示如何使用反射机制将 DataTable 转换为实体类对象实例: ```csharp private static List&lt;T&gt; TableToEntity(DataTable dt) where T : class, new() { Type type = typeof(T); List&lt;T&gt;...

    DataSet 转化为List的通用方法

    通用转换方法的核心在于能够自动识别`DataSet`中`DataTable`的列类型,并将其转换为相应的`List&lt;T&gt;`类型,其中`T`为具体的业务实体类。以下是对代码片段的详细解析: ```csharp public List&lt;T&gt; ChangeDataSet...

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

    在.NET开发中,DataTable和List是两种常用的集合类型,各有其应用场景。DataTable通常用于存储从数据库查询的结果,而List则更方便于在业务逻辑层进行数据操作。在某些情况下,需要将DataTable转换为List,以便更好...

    将DataTable转换成Listlt;Tgt;实现思路及示例代码

    前几天在工作中,遇到一个问题:需要将查询出来的DataTable数据源,转换成List的泛型集合(已知T类型)。第一反应,我想肯定要用到“泛型”(这不是废话吗?都说了要转换成List泛型集合了),而且还要用到“反射”...

    C#将DataTable转化为ListT

    在使用三层架构开发一个网站时,希望把DataTable对象转换为List对象,于是在网上找资料,总结一个比较方便的方法来实现——使用反射。 思路: 初始化一个List对象 获取到T所有的属性,初始化一个T对象 遍历所有属性...

    C#中的DataSet、string、DataTable、对象转换成Json的实现代码

    这个方法通过反射获取对象类型,并创建JSON表示: ```csharp public static string ListToJson(IList&lt;T&gt; list, string typeName) { var settings = new JsonSerializerSettings(); settings.TypeNameHandling =...

    c#中利用委托反射将DataTable转换为实体集的代码

    类泛型的约束: 代码如下: public static class ToModel&lt;T&gt; where T : class, new() 定义委托: 代码如下:public delegate void SetString(string value); 创建委托方法: 代码如下: private static SetString ...

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

    Database_List.zip_databaseList

    在标题为"Database_List.zip_databaseList"的压缩包中,我们关注的是一个通用方法,它能够实现DataTable与List对象之间的相互转换。这种转换在处理大量数据时非常有用,尤其是在进行数据操作、分析或者数据展示时。...

    将DataTable转换成List&amp;lt;T&amp;gt;实现思路及示例代码

    总结起来,通过创建一个泛型辅助类并利用反射和泛型特性,我们可以方便地将DataTable转换为List,从而提高代码的可维护性和类型安全性。这个转换方法适用于各种.NET应用程序,包括但不限于ASP.NET、Windows Forms或...

    NPOI 导入导出Excel (List泛型版)

    NPOL网上有返回DataTable,我自己编写了个泛型版的。

Global site tag (gtag.js) - Google Analytics