码迷,mamicode.com
首页 > 其他好文 > 详细

DataTable 和 List 相互转化

时间:2017-10-12 17:50:23      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:tar   generic   color   new   odata   cti   value   相互   model   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Data;
using System.Reflection;

/// <summary>
/// DtList 的摘要说明
/// </summary>
public class DtList
{
    /// <summary>  
    /// DataTable转换成List<T>  
    /// </summary>  
    /// <typeparam name="T"></typeparam>  
    /// <param name="table"></param>  
    /// <returns></returns>  
    public static List<T> GetList<T>(DataTable table)
    {
        List<T> list = new List<T>();
        T t = default(T);
        PropertyInfo[] propertypes = null;
        string tempName = string.Empty;
        foreach (DataRow row in table.Rows)
        {
            t = Activator.CreateInstance<T>();
            propertypes = t.GetType().GetProperties();
            foreach (PropertyInfo pro in propertypes)
            {
                tempName = pro.Name;
                if (table.Columns.Contains(tempName))
                {
                    object value = row[tempName];
                    if (!value.ToString().Equals(""))
                    {
                        pro.SetValue(t, value, null);
                    }
                }
            }
            list.Add(t);
        }
        return list.Count == 0 ? null : list;
    }

    /// <summary>  
    /// List<T>转换成DataSet  
    /// </summary>  
    /// <typeparam name="T"></typeparam>  
    /// <param name="list"></param>  
    /// <returns></returns>  
    public static DataSet ConvertToDataSet<T>(IList<T> list)
    {
        if (list == null || list.Count <= 0)
        {
            return null;
        }

        DataSet ds = new DataSet();
        DataTable dt = new DataTable(typeof(T).Name);
        DataColumn column;
        DataRow row;

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

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

            row = dt.NewRow();

            for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
            {
                System.Reflection.PropertyInfo pi = myPropertyInfo[i];

                string name = pi.Name;

                if (dt.Columns[name] == null)
                {
                    column = new DataColumn(name, pi.PropertyType);
                    dt.Columns.Add(column);
                }

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

            dt.Rows.Add(row);
        }

        ds.Tables.Add(dt);

        return ds;
    }
}

 调用时:

//DataTable转化List
List<Model> list = DtList.GetList<Model>(dt);
//List转化DataSet
DataSet ds = DtList.ConvertToDataSet<Model>(list);

 

DataTable 和 List 相互转化

标签:tar   generic   color   new   odata   cti   value   相互   model   

原文地址:http://www.cnblogs.com/kwm672225801/p/7657043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!