datatable 和List互转

 public class Help<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;
                    if (dt.Columns.Contains(tempName))
                    {
                        if (!pi.CanWrite) continue;
                        object value = dr[tempName];
                        if (value != DBNull.Value)
                            pi.SetValue(t, value, null);
                    }
                }
                ts.Add(t);
            }
            return ts;
        }
    }

==================== 华丽的分割线===========================

//List转Datatable

一、List<T>/IEnumerable转换到DataTable/DataView

private DataTable ToDataTable<T>(List<T> items)

{

    var tb = new DataTable(typeof (T).Name);

 

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

 

    foreach (PropertyInfo prop in props)

    {

        Type t = GetCoreType(prop.PropertyType);

        tb.Columns.Add(prop.Name, t);

    }

 

    foreach (T item in items)

    {

        var values = new object[props.Length];

 

        for (int i = 0; i < props.Length; i++)

        {

            values[i] = props[i].GetValue(item, null);

        }

 

        tb.Rows.Add(values);

    }

 

    return tb;

}

 

/// <summary>

/// Determine of specified type is nullable

/// </summary>

public static bool IsNullable(Type t)

{

    return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));

}

 

/// <summary>

/// Return underlying type if type is Nullable otherwise return the type

/// </summary>

public static Type GetCoreType(Type t)

{

    if (t != null && IsNullable(t))

    {

        if (!t.IsValueType)

        {

            return t;

        }

        else

        {

            return Nullable.GetUnderlyingType(t);

        }

    }

    else

    {

        return t;

    }

}

 

//方法二

public static DataTable ToDataTable<T>(IEnumerable<T> collection)

 {

     var props = typeof(T).GetProperties();

     var dt = new DataTable();

     dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());

     if (collection.Count() > 0)

     {

         for (int i = 0; i < collection.Count(); i++)

         {

             ArrayList tempList = new ArrayList();

             foreach (PropertyInfo pi in props)

             {

                 object obj = pi.GetValue(collection.ElementAt(i), null);

                 tempList.Add(obj);

             }

             object[] array = tempList.ToArray();

             dt.LoadDataRow(array, true);

         }

     }

     return dt;

 }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值