DataTable转成List
DataTable转成List
//把一个Datatable 赋值给一个List对象
//定义一个转换类
public class ConvertTool
{
public static List<T> DataConvert<T>(DataTable tb)
{
List<T> lst = new List<T>();
DataConvert<T>(tb, ref lst);
return lst;
} public static List<T> DataConvert<T>(DataTable tb, ref List<T> lst)
{
for (int i = ; i < tb.Rows.Count; i++)
{
lst.Add(DataConvert<T>(tb.Rows[i]));
}
return lst;
}
public static T DataConvert<T>(DataRow row)
{
//泛型 根据传来的类型创建实例对象
var type = typeof(T);
object obj = type.Assembly.CreateInstance(type.FullName);
var c = (T)obj;
DataConvert(row, ref c);
return c;
}
//获取一个类对象的所有公共属性 遍历所有属性 并赋值
public static T DataConvert<T>(DataRow row, ref T t) {
var ps = t.GetType().GetProperties();
var tbColumns = row.Table.Columns;
foreach (var c in ps)
{
var colName = c.Name;
if (tbColumns.Contains(colName))
{
object nr = row[colName] == DBNull.Value ? null : row[colName];
if (nr == null)
{
c.SetValue(t, nr, null);
}
else
{
var nrType = c.PropertyType;
if (nrType == typeof(decimal) || nrType == typeof(decimal?))
{
nr = Convert.ToDecimal(nr);
}
else if (nrType == typeof(Int64) || nrType == typeof(Int64?))
{
nr = Convert.ToInt64(nr);
}
else if (nrType == typeof(double) || nrType == typeof(double?))
{
nr = Convert.ToDouble(nr);
}
else if (nrType == typeof(Int32) || nrType == typeof(Int32?))
{
nr = Convert.ToInt32(nr);
}
else if (nrType == typeof(Int16) || nrType == typeof(Int16?))
{
nr = Convert.ToInt16(nr);
}
c.SetValue(t, nr, null);
}
}
}
return t;
}
}
定义一个测试的实体类
多种类型全部用上
public class TestClass
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Money { get; set; }
public bool IsValid { get; set; }
public DateTime BirthDay { get; set; } }
方法调用及显示结果
public class Program
{
static void Main(string[] args)
{
//定义一个DataTable 并赋值
DataTable dt = new DataTable("dtTest");
DataColumn dc = null;
dc = dt.Columns.Add("Id", Type.GetType("System.Int32"));
dc = dt.Columns.Add("Name", Type.GetType("System.String"));
dc = dt.Columns.Add("Money", Type.GetType("System.Decimal"));
dc = dt.Columns.Add("IsValid", Type.GetType("System.Boolean"));
dc = dt.Columns.Add("BirthDay", Type.GetType("System.DateTime"));
DataRow newRow;
newRow = dt.NewRow();
newRow["Id"] = "";
newRow["Name"] = "测试1";
newRow["IsValid"] = true;
newRow["Money"] = 100.00m;
newRow["BirthDay"] = DateTime.Now ;
dt.Rows.Add(newRow); newRow = dt.NewRow();
newRow["Id"] = "";
newRow["Name"] = "测试2";
newRow["IsValid"] = true;
newRow["Money"] = 100.00m;
newRow["BirthDay"] = DateTime.Now;
dt.Rows.Add(newRow); //调用DataTable转成List
List<TestClass> Li = ConvertTool.DataConvert<TestClass>(dt);
}
}
现在有很多流行的ORM框架,直接取出来对象数据很方便,不用再转。实现原理大同小异;
DataTable转成List的更多相关文章
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- 将DataTable转换成CSV文件
DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...
- C#:DataTable映射成Model
这是数据库开发中经常遇到的问题,当然,这可以用现成的ORM框架来解决,但有些时候,如果DataSet/DataTable是第三方接口返回的,ORM就不方便了,还得自己处理. 反射自然必不可少的,另外考 ...
- 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)
public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...
- C#将DataTable转换成list的方法
本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary> /// 酒店评论列表-分页 /// </su ...
- DataTable转换成List<T>
很多时候需要将DataTable转换成一组model,直接对model执行操作会更加方便直观. 代码如下: public static class DataTableToModel { public ...
- C# 中DataTable转成模型List
C# 中DataTable转成模型List 引入using System.Reflection; 命名空间 使用注意实体类的属性名必须和DataTable的列名一致 使用: DBList<Sto ...
- ASP.NET 将DataTable解析成JSON简介
这里解析json使用的是Newtonsoft.Json.dll程序集.下面请看code: using System; using System.Collections.Generic; using S ...
随机推荐
- Python多进程与多线程编程及GIL详解
介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程. Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multip ...
- android异常 More than one file was found with OS independent path 'META-INF/XXX'
android 异常总结:一个文件在jar包中出现多次. Error:Execution failed for task ':app:transformResourcesWithMergeJavaRe ...
- Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题
在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...
- Spring Cloud 之 Gateway.
一.Gateway 和 Zuul 的区别 Zuul 基于servlet 2.5 (works with 3.x),使用阻塞API.它不支持任何长期的连接,如websocket. Gateway建立在S ...
- chapter01
1.请用命令查出ifconfig命令程序的绝对路径[root@localhost ~]# which ifconfig 答:/usr/sbin/ifconfig 2.请用命令展示以下命令哪些是内部命令 ...
- 2019.7 佳木斯培训A层
day1题目及题解 day2题目及题解 day3题目及题解 day4题目及题解 day5题目及题解
- Flink状态专题:keyed state和Operator state
众所周知,flink是有状态的计算.所以学习flink不可不知状态. 正好最近公司有个需求,要用到flink的状态计算,需求是这样的,收集数据库新增的数据. ...
- 【SQL数据库设计】数据库设计【小型数据库】
数据库设计 需求 表结构 字段类型.是否允许为null.是否有默认值 索引设计 数据库引擎的选择 根据产品原型分析,词性分析法,名词创建表或字段,动词表示关系. 数据存储:长期存储的数据, 1.主键: ...
- 基于 Autojs 的 APP、小程序自动化测试 SDK - 2019年8月3日
原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持 ...
- 深入理解JVM-java字节码文件结构剖析(练习解读字节码)
public class MyTest2 { String str = "Welcome"; private int x = 5; public static Integer in ...