`
sty2008boy
  • 浏览: 302461 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

DataTable 转 LIST

阅读更多

 //D to L
        public static IList<T> ConvertTo<T>(DataTable table)
        {
            if (table == null)
            {
                return null;
            }

            List<DataRow> rows = new List<DataRow>();

            foreach (DataRow row in table.Rows)
            {
                rows.Add(row);
            }

            return ConvertTo<T>(rows);
        }

        public static IList<T> ConvertTo<T>(IList<DataRow> rows)
        {
            IList<T> list = null;

            if (rows != null)
            {
                list = new List<T>();

                foreach (DataRow row in rows)
                {
                    T item = CreateItem<T>(row);
                    list.Add(item);
                }
            }

            return list;
        }  

        public static T CreateItem<T>(DataRow row)  
    {  
        T obj = default(T);  
        if (row != null)  
        {  
            obj = Activator.CreateInstance<T>();  
  
            foreach (DataColumn column in row.Table.Columns)  
            {  
                PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);  
                try  
                {  
                    object value = row[column.ColumnName];  
                    prop.SetValue(obj, value, null);  
                }  
                catch  
                {  //You can log something here   
                    //throw;  
                }  
            }  
        }  
  
        return obj;  
    }  
 

 

//方法2:

把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便。 
所以很多人都是按照以下方式做的:

// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ConvertToUserInfo(dt);

 问题:如果此系统有几十上百个模型,那不是每个模型中都要写个把DataTable转换为此模型的方法吗?
解决:能不能写个通用类,可以把DataTable转换为任何模型,呵呵,这就需要利用反射和泛型了

  

view sourceprint?using System;  

using System.Collections.Generic;  

using System.Text;  

using System.Data;  

using System.Reflection;  

   

namespace NCL.Data  

{  

    /// <summary>  

    /// 实体转换辅助类  

    /// </summary>  

    public class ModelConvertHelper<T> where   T : new()  

     {  

        public static IList<T> ConvertToModel(DataTable dt)  

         {  

            // 定义集合  

             IList<T> ts = new List<T>();  

   

            // 获得此模型的类型  

             Type type = typeof(T);  

   

            string tempName = "";  

   

            foreach (DataRow dr in dt.Rows)  

             {  

                 T t = new T();  

   

                // 获得此模型的公共属性  

                 PropertyInfo[] propertys = t.GetType().GetProperties();  

   

                foreach (PropertyInfo pi in propertys)  

                 {  

                     tempName = pi.Name;  

   

                    // 检查DataTable是否包含此列  

                    if (dt.Columns.Contains(tempName))  

                     {  

                        // 判断此属性是否有Setter  

                        if (!pi.CanWrite) continue;  

   

                        object value = dr[tempName];  

                        if (value != DBNull.Value)  

                             pi.SetValue(t, value, null);  

                     }  

                 }  

   

                 ts.Add(t);  

             }  

   

            return ts;  

   

         }  

     }  

} 

使用方式:

// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);

 

Repeater绑定泛型List<T>比绑定DataTable效率更高,而且绑定List<T>可以实现智能感应提示:

这里举例在Repeater中绑定泛型List<T>的用法:

 用<%#((Type)Container.DataItem).成员 %>可实现智能感应提示,而且比<%# Eval("成员")%>效率更高!

后台.cs代码:

view sourceprint?List<Model.OrderItems> orderItemList = new DAl.OrderItemsDAO().GetListArray("OrderId = '" + orderId + "' order by Id desc");  

repList.DataSource = orderItemList;  

repList.DataBind(); 

 

前台.aspx代码:

view sourceprint?<asp:Repeater ID="repList" runat="server">      

<ItemTemplate>      

    <tr>      

    <td class="td02"><a href='productcon.aspx?id=<%#Eval("ProductId") %>' target="_blank"><%#Eval("ProductName") %></a></td>      

    <td align="right" valign="middle" class="td02">¥<%#((Model.OrderItems)Container.DataItem).UnitPrice %></td>      

    <td valign="middle" class="td02 colorgreg"><%#((Model.OrderItems)Container.DataItem).Quantity%></td>      

    <td align="right" class="td02">¥<%#((Model.OrderItems)Container.DataItem).TotalPrice %></td>      

    </tr>      

</ItemTemplate>      

</asp:Repeater> 
 
分享到:
评论

相关推荐

    DataTable转List

    c#DataTable转List实现自动转换。

    DataTable 和List 相互转换

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

    c#的datatable转list示例

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

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

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

    list转换为dataTable

    在本篇文章中,我们将深入探讨如何将一个列表(List)转换为数据表(DataTable)。这一操作在.NET框架下的数据处理中十分常见,特别是在需要将内存中的数据结构转换为可以进行进一步处理或展示的数据表格式时。 ###...

    JsonHelper list datatable to json

    JsonHelper list datatable to json

    .net 中datatable与list泛型实体对象的互相转换

    非常方便的datatable类型与List泛型实体对象集合的互相转换,在面向对象的开发中,经常会用到的,如使用上不懂可以咨询我

    List(Of T)转换成DataTable.VB

    List(Of T)转换成DataTable

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

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

    .net 将datatable转换为实体类LIST

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

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

    代码如下:public class User { public int ID { get;...下面是我写的一个通用方法,分享+记录,便于日后直接Copy ~ 代码如下:private static List&lt;T&gt; TableToEntity(DataTable dt) where T : class

    C#将DataTable转换成list的方法

    本文实例讲述了C#将DataTable转换成list及数据分页的方法。分享给大家供大家参考。具体如下: 代码如下:///    /// 酒店评论列表-分页  ///   /// ”userId”&gt;  /// ”pageIndex”&gt;当前页  /// ”pageCount”...

    List转DataTable并导出为Excel

    在.NET开发环境中,经常需要处理各种数据集合,例如List对象,然后将其转化为表格格式,比如DataTable,以便于进一步的数据操作,比如...以上就是关于"List转DataTable并导出为Excel"的相关知识点,希望对你有所帮助。

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

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

    datatable和list互转

    通用datatable和list互转代码

    C#中将DataTable转化成ListT的方法解析

    通常在DAL层我们都需要把DataTable转换为List让调用者尽可能的好用,尽量的不用关心数据库的字段等,所以我们一般传过去的都是List而不是DataTable。 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力...

    DataSet、List、Datatable转换为Json

    List转换成Json 对象转换为Json DataSet转换为Json DataTable转换为Json DataReader转换为Json

Global site tag (gtag.js) - Google Analytics