反射在ADO.NET中的運用(你還在每個項目中循環遍歷DataTable嗎)


圖片有點大哈,但大更能說明問題。您是不是每個項目都在重復的做圖片中的事情-----循環把數據庫中返回的表轉化為實體對象。是不是每次都在抱怨這樣的重復工作。字段越多抱怨越多!不用抱怨了。當你看到這篇文章的時候您的春天就到了,我們可以寫一個通用的讀取類來為我們轉化。

代碼實現

 

        static List<T> ConvertDataTalbeToObject<T>(DataTable dt)

        {

            List<T> lt = new List<T>();

 

            if (dt == null)

                return lt;

 

            Assembly ass = Assembly.LoadFile(Path.GetFullPath("通用轉對象.exe"));//加載程序集

            Type type = typeof(T);//獲取類型

            foreach (DataRow dr in dt.Rows)

            {

                object o = ass.CreateInstance(type.ToString());//實例化一個實例

                PropertyInfo[] propertyInfo = type.GetProperties();//獲取該類的所有屬性

                foreach (PropertyInfo p in propertyInfo)

                {

                    if (p.PropertyType.Name == "Int32")

                        p.SetValue(o, (dr[p.Name] != null)?(Convert.ToInt32(dr[p.Name])):(Int32.MinValue));

                    else if (p.PropertyType.Name == "Guid")

                        p.SetValue(o, new Guid( dr[p.Name].ToString()));

                    else if (p.PropertyType.Name == "Boolean")

                        p.SetValue(o, Convert.ToBoolean(dr[p.Name].ToString()));

                    else

                        p.SetValue(o, dr[p.Name].ToString());

                }

                lt.Add((T)o);

            }

            return lt;

        }

有什么錯誤的地方和不足之處希望大家指出,您的寶貴意見是我寫下去的動力!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM