【C#常用方法】1.DataTable与List<T>的相互转换
2024-09-03 05:49:25
DataTable与List<T>互转
1.List<T>转DataTable
public static DataTable ListToDataTable<T>(List<T> list)
{
if(list==null || list.Count==)
{
return new DataTable();
}
//获取T下所有的属性
Type entityType = list[].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties(); DataTable dt = new DataTable("data");
for(int i=; i<entityProperties.Length; i++)
{
dt.Columns.Add(entityProperties[i].Name);
}
foreach (var item in list)
{
if(item.GetType() != entityType)
{
throw new Exception("要转换集合元素类型不一致!")
}
//创建一个用于放所有属性值的数组
object[] entityValues = new object[entityProperties.Length];
for(int i=; i<entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(item, null);
} dt.Rows.Add(entityValues)
}
return dt;
}
2.DataTable转List<T>
public static IList<T> ConvertToModel(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; // 检查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;
}
最新文章
- C#连接Oracle数据库(直接引用dll使用)
- VS2012+LUA环境搭建
- Jstl简单应用
- android:layout_weight
- YII2 Activedataprovider 类分页的使用
- POJ 1410 Intersection(判断线段交和点在矩形内)
- date类型时间比较大小
- SharePoint 2010 获取列表全部定义方法
- C#_wpf_userinput_数据绑定_后台对象改变,界面数据也变化
- Android开发必备:颜色选择
- MOOC即Massive Open Online Course的缩写
- RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
- Nethogs - 网络流量监控工具
- Codeforces340 E. Iahub and Permutations
- 回顾:前端模块化和AMD、CMD规范(全)
- pyglet--旋转的矩形
- JAVA 动态代理学习记录
- .Net 鉴权授权
- python显示多个图表
- 53. Maximum Subarray (Array; DP)