using System;
using System.Collections.Generic;
using System.Data;
namespace ModelToDataTableDemo
{
///
/// https://www.cnblogs.com/LifeDecidesHappiness/p/15592278.html
/// C# DataTable 转换 Model实体类,DataTable 转换 List 集合
/// LDH @ 2021-11-23
///
internal class Program
{
private static void Main()
{
Console.Title = "C# DataTable 转换 Model实体类,DataTable 转换 List 集合";
ModelToDataTable();
Console.ReadKey();
}
private static void ModelToDataTable()
{
// 创建一个新的DataTable
var dt = new DataTable("User");
dt.Columns.Add("UserName", typeof(string));
dt.Columns.Add("Password", typeof(string));
dt.Columns.Add("Age", typeof(int));
for (var i = 0; i < 5; ++i)
{
var dr = dt.NewRow();
dr["UserName"] = "用户名" + i;
dr["Password"] = "密码" + i;
dr["Age"] = 20;
dt.Rows.Add(dr);
// DataTable 转换为实体
var user = DataTableToModel(dt);
Console.WriteLine("UserName:" + user.UserName);
}
// DataTable 转换为List
var users = DataTableToList(dt);
Console.WriteLine("User Count:" + users.Count);
}
///
/// DataTable -> Model
///
/// 数据项
/// DataTable
///
public static T DataTableToModel(DataTable dt) where T : new()
{
if (dt == null || dt.Rows.Count == 0) return default;
var t = new T();
// 获取行数据
var dr = dt.Rows[0];
// 获取栏目
var columns = dt.Columns;
// 获得此模型的公共属性
var property = t.GetType().GetProperties();
foreach (var pi in property)
{
var name = pi.Name;
// 检查DataTable是否包含此列
if (columns.Contains(name))
{
if (!pi.CanWrite) continue;
var value = dr[name];
if (value != DBNull.Value) pi.SetValue(t, value, null);
}
}
return t;
}
///
/// DataTable -> List
///
/// 数据项
/// DataTable
///
public static List DataTableToList(DataTable dt) where T : new()
{
if (dt == null || dt.Rows.Count == 0) return new List();
// 定义集合
var list = new List();
// 获取栏目
var columns = dt.Columns;
foreach (DataRow dr in dt.Rows)
{
var t = new T();
// 获得此模型的公共属性
var property = t.GetType().GetProperties();
foreach (var pi in property)
{
var name = pi.Name;
// 检查DataTable是否包含此列
if (columns.Contains(name))
{
if (!pi.CanWrite) continue;
var value = dr[name];
if (value != DBNull.Value) pi.SetValue(t, value, null);
}
}
list.Add(t);
}
return list;
}
}
}
namespace ModelToDataTableDemo
{
///
/// 用户
///
public class User
{
///
/// 用户名
///
public string UserName { get; set; }
///
/// 密码
///
public string Password { get; set; }
///
/// 年龄
///
public int Age { get; set; }
}
}