您好,登錄后才能下訂單哦!
平時寫代碼的時候經常會遇到DataTable與List<T>之間的轉換操作,由于DataTable數據集合不像List<T>指定了對應的T類型,所以在操作的時候沒有List<T>方便,為了方便兩個集合的轉換,特此寫下以下類記錄兩者之間的互換。
class ModelConvertHelper<T> where T : new()
{
/// <summary>
/// 把DataTable轉換成指定類型的List
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static IList<T> ConvertDataTableToList(DataTable dt)
{
// 定義集合
IList<T> ts = new List<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; // 檢查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;
}
/// <summary>
/// 把泛型List轉換成DataTable
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable ConvertListToDataTable(List<T> list)
{
DataTable dt = new DataTable();
// 獲得此模型的公共屬性
PropertyInfo[] propertys = typeof(T).GetProperties();
foreach (PropertyInfo pi in propertys)
{
// 判斷此屬性是否有Getter
if (!pi.CanRead) continue;
dt.Columns.Add(pi.Name, pi.PropertyType);
}
foreach (T item in list)
{
propertys = item.GetType().GetProperties();
DataRow newRow = dt.NewRow();
foreach (PropertyInfo pi in propertys)
{
if (!pi.CanRead) continue;
newRow[pi.Name] = pi.GetValue(item);
}
dt.Rows.Add(newRow);
}
return dt;
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。