將DataTable轉換成List泛型集合助手類
將DataTable轉換成List<T>泛型集合助手類,這個類我放在了Entity實體類層中:
[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
namespace Entity
{
/// <summary>
/// 將DataTable轉換成泛型集合IList<>助手類
/// </summary>
public class ConvertHelper
{
/// <summary>
/// 單表查詢結果轉換成泛型集合
/// </summary>
/// <typeparam name="T">泛型集合型別</typeparam>
/// <param name="dt">查詢結果DataTable</param>
/// <returns>以實體類為元素的泛型集合</returns>
public static IList<T> convertToList<T>(DataTable dt) where T : new()
{
// 定義集合
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;
}
}
}