c# DataTable 数据集处理DataTableHandler
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Collections;
using System.IO;
using System.Xml.Serialization; namespace HuaTong.General.Utility
{
/// <summary>
/// 数据集处理
/// </summary>
public static class DataTableHandler
{
/// <summary>
/// 检查DataSet是否可用
/// </summary>
public static bool CheckData(this DataSet ds, int valNum)
{
var flag = ds != null && ds.Tables.Count > ;
if (flag)
{
int count = ;
for (var i = ; i < valNum; i++)
{
var dtflag = ds.Tables[i].CheckData();
if (dtflag) count++;
}
return count == valNum;
}
return flag;
} /// <summary>
/// 检查DataTable是否可用
/// </summary>
public static bool CheckData(this DataTable dt)
{
return dt != null && dt.Rows.Count > ;
} /// <summary>
/// 检查DataSet是否可用
/// </summary>
public static DataRow FirstRow(this DataSet ds)
{
return ds.Tables[].FirstRow();
} /// <summary>
/// 检查DataTable是否可用
/// </summary>
public static DataRow FirstRow(this DataTable dt)
{
return dt.Rows[];
} /// <summary>
/// DataTable转换为List
/// </summary>
public static List<T> ToList<T>(this DataTable dt)
where T : new()
{ List<T> list = new List<T>(); foreach (DataRow dr in dt.Rows)
{
T t = dr.ToEntity<T>();
//对象添加到泛型集合中
list.Add(t);
}
return list;
} /// <summary>
/// DataRow转换为实体
/// </summary>
public static T ToEntity<T>(this DataRow dr)
where T : new()
{
if (dr == null)
{
return default(T);
} T model = new T();
var props = ModelHandler.PropCache(model);
for (int i = ; i < dr.Table.Columns.Count; i++)
{
if (props.Any(m => StringHelper.IsEqualString(m.Name, dr.Table.Columns[i].ColumnName)))
{
var prop = props.Single(m => StringHelper.IsEqualString(m.Name, dr.Table.Columns[i].ColumnName));
if (dr[i] != null && dr[i] != DBNull.Value)
{
prop.SetValue(model, Convert.ChangeType(dr[i], prop.PropertyType), null);
}
}
}
return model;
} /// <summary>
/// List转换为DataTable
/// </summary>
public static DataTable ToDataTable<T>(this List<T> items)
{
var tb = new DataTable(typeof(T).Name); PropertyInfo[] props = ModelHandler.PropCache<T>(); foreach (PropertyInfo prop in props)
{
Type t = ModelHandler.GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);
} foreach (T item in items)
{
var values = new object[props.Length]; for (int i = ; i < props.Length; i++)
{
values[i] = props[i].GetValue(item, null);
} tb.Rows.Add(values);
} return tb;
} /// <summary>
/// DataTable转换为XML
/// </summary>
public static string ToXML(this DataTable dt)
{
if (!string.IsNullOrEmpty(dt.TableName))
{
dt.TableName = "datatable_1";
}
//xml序列化对象
XmlSerializer xmlSerial = new XmlSerializer(typeof(DataTable));
StringWriter sw = new StringWriter();
xmlSerial.Serialize(sw, dt); // 序列化table
StringReader sr = new StringReader(sw.ToString());
return sr.ReadToEnd();
}
}
}
c# DataTable 数据集处理DataTableHandler的更多相关文章
- DataTable数据集转换为List非泛型以及泛型方式
前言 DataTable是断开式的数据集合,所以一旦从数据库获取,就会在内存中创建一个数据的副本,以便使用.由于在实际项目中,经常会将DataTable中的每行数据转换为Model,然后放到List集 ...
- Linq查询datatable的记录集合
通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...
- 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)
DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...
- 泛型的运用(用于查询数据后DataTable转实体类)
2019.8.14 更新 补全了DataTable转泛型集合的方法: /// <summary> /// DataTable转实体类集合 /// </summary> /// ...
- MVC3.0----整理之一
1.ViewBag对象是动态解析对象 @{ ViewBag.Title = "Insert"; } 不仅可以把单个的对象绑定到 ViewBag上,还可以直接绑定List ViewB ...
- [C#对Oracle操作]C#操作调用Orcale存储过程有参数
/// <summary> /// 获取ERP固定资产计提数据 /// </summary> /// <param name="strCompanyCode&q ...
- C# 数据操作工具类
CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...
- table转list
DataTable数据集转换为List非泛型以及泛型方式 前言 DataTable是断开式的数据集合,所以一旦从数据库获取,就会在内存中创建一个数据的副本,以便使用.由于在实际项目中,经常会将 Dat ...
- C# ftp 图片上传多快好省
前言 此篇讲到的是图片上传功能,每个网站必定会有这样类似的功能,上传文件.上传图片等等.那么接下来,看看我们EF+uploadfile+ftp如何玩转上传图片吧 效果预览 具体实现 一个简单数据库 只 ...
随机推荐
- 获取Android设备的方向,Sensor和SensorManager实现手机旋转角度
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/425.html 带有g-sensor的Android设备上可通过API ...
- 解决Linux 下server和client 通过TCP通讯:accept成功接收却报错的问题
今天在写简单的TCP通讯例子的时候,遇到了一个问题:server 和client能够连接成功,并且client也能够正常发送,但server就是接收不到,在网上搜索一番后,终于解决了问题.在这里整理如 ...
- nginx之proxy、cache、upstream模块学习
nginx之proxy反向代理模块: location ^~ /proxy_path/ { root "/www/html"; 这里没必要配置 index index.html; ...
- 20145301《Java程序设计》实验二报告:Java面向对象程序设计
20145301<Java程序设计>实验二报告:Java面向对象程序设计 课程:Java程序设计 实验名称:Java面向对象程序设计 实验目的与要求: 初步掌握单元测试和TDD 理解并掌握 ...
- 快用Visual Studio(四)- 主题 偏好与快捷键
使用$ CMD + ,打开快捷键设置窗口 使用$ CMD + SHIFT + ,切换默认配置 使用$ CMD + SHIFT + O打开搜索框搜索已配置选项 关于代码偏好设置有三种模式: 默认模式:C ...
- Css初步认识
css 美化页面 cascading style sheet 层叠样式表 css语法: 选择器{ css属性名:属性值;css属性名:属性值;} css引入方式: 方式一:内联样式表 通过标签 ...
- 虚拟机 Ubuntu18.04 tensorflow cpu 版本
虚拟机 Ubuntu18.04 tensorflow cpu 版本 虚拟机VMware 配置: 20G容量,可扩充 2G内存,可扩充 网络采用NAT模式 平台:win10下的Ubuntu18.04 出 ...
- python 贪婪和非贪婪模式
这样的正则表达式: r'\*(.+)\*' 如果想要匹配*something*这样的一个串按道理说是没问题的 但是如果文本是*this* is *something* 那么我们的正则表达式就会采取贪 ...
- Angular如何给动态生成的元素绑定事件
在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular ...
- windows系统下,安装多个版本的jdk,java -version
问题描述: 开始安装了 jdk8 后来装了jdk9,可以为项目配置不同的jdk,相安无事: 今天发现软件需要jdk8的环境,结果我的java -version始终是jdk9.0.1: 解决办法:使ja ...