C# DataTable转换成实体列表 与 实体列表转换成DataTable

/// <summary>
        /// DataTable转换成实体列表
        /// </summary>
        /// <typeparam name="T">实体 T </typeparam>
        /// <param name="table">datatable</param>
        /// <returns></returns>
        public static IList<T> DataTableToList<T>(DataTable table)
            where T : class
        {
            if (!IsHaveRows(table))
                return new List<T>();

            IList<T> list = new List<T>();
            T model = default(T);
            foreach (DataRow dr in table.Rows)
            {
                model = Activator.CreateInstance<T>();

                foreach (DataColumn dc in dr.Table.Columns)
                {
                    object drValue = dr[dc.ColumnName];
                    PropertyInfo pi = model.GetType().GetProperty(dc.ColumnName);

                    if (pi != null && pi.CanWrite && (drValue != null && !Convert.IsDBNull(drValue)))
                    {
                        pi.SetValue(model, drValue, null);
                    }
                }

                list.Add(model);
            }
            return list;
        }

        /// <summary>
        /// 实体列表转换成DataTable
        /// </summary>
        /// <typeparam name="T">实体</typeparam>
        /// <param name="list"> 实体列表</param>
        /// <returns></returns>
        public static DataTable ListToDataTable<T>(IList<T> list)
            where T : class
        {
            if (list == null || list.Count <= 0)
            {
                return null;
            }
            DataTable dt = new DataTable(typeof(T).Name);
            DataColumn column;
            DataRow row;

            PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

            int length = myPropertyInfo.Length;
            bool createColumn = true;

            foreach (T t in list)
            {
                if (t == null)
                {
                    continue;
                }

                row = dt.NewRow();
                for (int i = 0; i < length; i++)
                {
                    PropertyInfo pi = myPropertyInfo[i];
                    string name = pi.Name;
                    if (createColumn)
                    {
                        column = new DataColumn(name, pi.PropertyType);
                        dt.Columns.Add(column);
                    }

                    row[name] = pi.GetValue(t, null);
                }

                if (createColumn)
                {
                    createColumn = false;
                }

                dt.Rows.Add(row);
            }
            return dt;

        }
时间: 2024-12-29 23:48:20

C# DataTable转换成实体列表 与 实体列表转换成DataTable的相关文章

利用JAXB实现java实体类和xml互相转换

1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同理).map.Teacher.Date 类型的属性 package jaxb; import java.util.Date; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlAccess

利用XStream实现实体类与xml的转换

package com.wanhua.util; import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver; /** * 利用XStream实现实体类与xml的转换 *  * @author w_xfpenga *  *         2014-11-27 */public class XStream2Text { static XStream xStream = new X

反射 DataTable拓展方法 转实体对象、实体集合、JSON

Mapper类 using System; using System.Collections.Generic; using System.Data; using System.Globalization; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace CommonHelper { public class Mapper { public

转换专家教你怎样把pdf转换成word文档

将pdf转换成word文档是让我们非常头疼的转换问题,由于在工作中出现的频率越来越多,不得不被重视起来,随之而来的是一系列的文本格式转换工具,主要是pdf格式转换工具.虽然很多工具都能够将pdf转换成word,但效果就不能保证了,小编在工作上还是比较敬业的,当即寻找文件格式转换专家来帮忙,想要把pdf转word的效果变成更好,转换的更加舒心,就让转换专家教怎样把pdf转换成word文档吧. 转换专家表示:在工作中接触pdf文件的朋友都知道,我们常常需要导出pdf中的图片.将pdf转换成offic

服务消息、业务实体以及数据实体

名次解释 服务消息 - 分布式应用中各个服务之间传递的消息,以WCF为例的话就是数据契约. 业务实体 - 业务对象模型.领域模型中和业务相关的实体. 数据实体 - 完全和关系型数据库结构对应的数据实体. 问题 今天有人在MSN上问了我一个问题引发了我的思考,问题大致如下: 最近在学习3.0的一些技术,比如WCF和LINQ,我尝试使用这些技术写一个分布式的新闻系统,系统的构架如下: ※     一个数据访问层,其中包含了一个数据实体(自动生成的).数据访问层使用Linq To SQL进行数据访问操

转换达人教你如何将jpg转换成pdf

在广告公司上班的职员是不是总是被BOOS要求将大量的jpg转换成pdf呢?当jpg数量较少时,通常都这样做的:将jpg图片插入到word文档中,然后在输出为pdf格式.但,在数量很多的情况下,我们该怎么办呢?还是用老方法吗?那样是不是很麻烦?有没有其它的方法呢?下面由转换达人教你如何将jpg转换成pdf. 如何将jpg转换成pdf完整操作演示:   准备工作:下载并安装迅捷jpg转换成pdf转换器   第一步:软件安装后,打开运行,在操作界面选择其他格式转PDF区域列表中的“图片转PDF”功能模

画像专题(2-3)根据实体类型和实体主键获取客户画像画像专题

a.功能描述: 根据实体类型和实体主键查询实体画像信息 实体画像包括:实体各个维度的信息,为避免数据量较大,通过开关控制是否返回明细事实数据. b.入口参数: 实体类型: 实体主键: c.出口参数: 维度列表: 维度A信息+维度A事实列表<可选> 维度B信息+维度B事实列表<可选> 维度C信息+维度C事实列表<可选> d.实现逻辑: 系统根据[实体类型]找到维度定义列表, 对于每个维度定义, 根据[实体主键]值,获取对应的维度标签信息, 如果指定了返回维度事实, 根据[

传参数与传实体、返回实体与返表——三层架构登录实例

在用三层做窗体登录实例的时候,暂时没有加设计模式和反射配置,与以前做的<机房收费系统>相比,除了引入分层的理念外,最大的改观就是数据的传递由传参升级成了传实体. 先看下用传参数方式的登录按钮click事件 通过参数传递乍看起来清晰易读,但是这样的程序耦合度太高,会为以后的数据变动和维护埋下隐患.例如,需要传递的数据增加了一个ID,user=mgr.SelectUserLogin(userName,password)行代码就要修改一次,如果再增加一个Level呢?难道需求每变动一次,就要改动一次

机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)

刚刚开始接触三层的时候,我只做了两个登录小窗体的例子.画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西).不过,欠下的总要还的.在做机房重构的时候,问题出现了.如果只用三层+实体,我能做出来,但是,要求重构不能只用三层+实体,那么,就要好好分析一下了. 首先说说三层+实体:就是表现层(U层)直接调用业务逻辑层(B层)的逻辑,业务逻辑层在直接访问数据层(D层),在把数据返回到B层后返回到U层.首先,只用三层+实体做程序时,灵活性不够高.如果想换数