C#中泛型舉例List<T>與DataTable相互轉換
更新時間:2022年05月11日 08:07:05 作者:springsnow
這篇文章介紹了C#中泛型舉例List<T>與DataTable相互轉換的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、 DataTable轉換到List<T>
/// <summary>
/// TableToList
/// </summary>
public class TableListConverter<T> where T : class, new()
{
public static IList<T> TableToList(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))// 檢查DataTable是否包含此列
{
if (!pi.CanWrite) continue;// 判斷此屬性是否有Setter
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}
}應用:
// 獲得查詢結果
DataTable dt = DbHelper.ExecuteDataTable("...");
// 把DataTable轉換為IList<UserInfo>
IList<UserInfo> users = TableListConverter<UserInfo>.TableToList(dt);二、 List<T>轉換到DataTable
/// <summary>
/// ListToTable
/// </summary>
public class TableListConverter
{
public static DataTable ListToTable<T>(IList<T> list) where T : class, new()
{
if (list == null) return null;
Type type = typeof(T);
DataTable dt = new DataTable();
PropertyInfo[] properties = Array.FindAll(type.GetProperties(), p => p.CanRead);//判斷此屬性是否有Getter
Array.ForEach(properties, prop => { dt.Columns.Add(prop.Name, prop.PropertyType); });//添加到列
foreach (T t in list)
{
DataRow row = dt.NewRow();
Array.ForEach(properties, prop =>
{
row[prop.Name] = prop.GetValue(t, null);
});//添加到行
dt.Rows.Add(row);
}
return dt;
}
}應用:
//IList<UserInfo> users DataTable dt =TableListConverter.ListToTable(users)


到此這篇關于C#中泛型舉例List<T>與DataTable相互轉換的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C#中的SQLCommand命令與DbTransaction事務處理
這篇文章介紹了C#中的SQLCommand命令與DbTransaction事務處理,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05

