1. 程式人生 > >DateTable轉換為List泛型

DateTable轉換為List泛型


  這次這個utility在兩個專案中運用,以便以後查詢,在這邊先記錄下來。

  /// <summary>
    /// 列表工具類
    /// </summary>
    public static class ListUtil
    {
        /// <summary>
        /// 複製列表,而不是引用地址改變
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <returns>結果</returns>
        public static IList<T> CopyList<T>(IList<T> list)
        {
            if (list != null)
            {
                IList<T> result = new List<T>();
                foreach(T t in list)
                {
                    result.Add(t);
                }

                return result;
            }

            return null;
        }

      
    }

    //將DataTable轉化成List泛型的方法
    public class ListUtil<T> where T : new()
    {
        /// <summary> 
        /// 利用反射和泛型 
        /// </summary> 
        /// <param name="dt"></param> 
        /// <returns></returns> 
        public static List<T> ConvertToList(DataTable dt)
        {

            // 定義集合 
            List<T> ts = new List<T>();

            // 獲得此模型的型別 
            Type type = typeof(T);
            //定義一個臨時變數 
            string tempName = string.Empty;
            //遍歷DataTable中所有的資料行 
            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;

        }

    }

   呼叫程式碼如下:

  list = ListUtil<AccPaymentTypeEntity>.ConvertToList(ds.Tables[0]);