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#常用方法】1.DataTable与List<T>的相互转换的更多相关文章

  1. C#中DataTable与XML格式的相互转换

    1.DataTable转换成XML public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; ...

  2. DataTable / DataSet 与 xml 的相互转换

    之前做DataTable和DataSet转xml一直使用XmlSerializer 序列化完成.今天发现新方法,哇咔咔方便了很多.还不用担心Name为空时报错 static void Main(str ...

  3. C#开发中常用方法2------json转DataTable

    /// <summary>/// 将json转换为DataTable/// </summary>/// <param name="strJson"&g ...

  4. 一个DataTable赋值给另一个DataTable的常用方法

    DataView view = new DataView();view.Table = DataTableA;view.RowFilter = "itemType = 'book'" ...

  5. Newtonsoft.Json 与 DataTable的相互转换

    1.这里下载:http://www.newtonsoft.com/products/json/ 安装:    解压下载文件,得到Newtonsoft.Json.dll    在项目中添加引用 2.引入 ...

  6. DataTable数据与Excel表格的相互转换

    using Excel = Microsoft.Office.Interop.Excel; private static Excel.Application m_xlApp = null; /// & ...

  7. List<T> 和DataTable的相互转换

    我用的将集合类转换为DataTable 的方法 /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param ...

  8. 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】

    本篇把项目中用到的一些通用方法总结出来, 这些方法因为经常需要在项目中用到,所以把它们归纳在一起, 形成一个.dll 文件是一个理想的选择. 这样也便于日后缩短开发周期. 一. 把一个DataGrid ...

  9. List,泛型和Datatable 的相互转换

    public static DataTable ToDataTableTow(IList list) { DataTable result = new DataTable(); ) { Propert ...

随机推荐

  1. JMETER 使用断言

    断言概念 断言就是在执行某个请求后,根据返回的结果,判断返回是否正确,如果不正确,则表示事务失败. 添加断言 启动流程时返回的数据是一个 json对象,结构为 {success:true,msg:&q ...

  2. Nios II IDE代码优化,quartus ii 11.0版本IDE

    开发Altera Nios II软件可使用Nios II IDE或 Nios II Software BuildTools for Eclipse(即:Nios II SBT for Eclipse) ...

  3. 查看 Python 对象的属性

    1 .dir函数可以返回一个对象的所有属性和方法. 示例:查看 int 对象的属性和方法 示例: 查看 dict 对象的属性和方法 标红的这些是不是遇到过? 2.help()调用内置帮助系统 示例 3 ...

  4. P4137 Rmq Problem / mex(主席树)

    传送门 思路: 直接上主席树,对于每个询问\((l,r)\),我们在第\(r\)个版本的主席树中查询最晚出现的小于\(l\)最小的数就行了. 因为答案可能为\(a_i+1\),所以我们在离散化的时候考 ...

  5. vue-router路由嵌套与二级路由重定向

    (1)公共路由裁减 不是每个页面都存在导航,所以不要把导航组件在根组件APP.vue里引入,哪个页面需要,在哪里引入即可. 方案: 哪个页面需要,在哪个页面引入即可 (2)嵌套路由 注意:childr ...

  6. Hive 问题

    hive 重启连接不上 异常信息: FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache ...

  7. Codeforces Round #609 (Div. 2) A到C题

    签到,乘以两个相邻的合数 #include<bits/stdc++.h> using namespace std; int main(int argc, char const *argv[ ...

  8. ReSharper安装

    ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加C#和Visual Ba ...

  9. Checkout 显示 URL /../../.. 不存在

    Checkout 显示 URL /../../.. 不存在 Checkout 显示 URL /../../.. 不存在 如果库的路径是 svn库的路径为:/usr/local/svn/test/ 启动 ...

  10. 管理node.js的nvm

    我们坑同时在运行2个项目.而2个不同的项目所使用的node版本又不一样,或者是要用更新的node版本进行试验或学习.这种情况下,对于维护多个版本的node将会是一键非常麻烦的事情,而nvm就是为了解决 ...