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的更多相关文章

  1. DataTable数据集转换为List非泛型以及泛型方式

    前言 DataTable是断开式的数据集合,所以一旦从数据库获取,就会在内存中创建一个数据的副本,以便使用.由于在实际项目中,经常会将DataTable中的每行数据转换为Model,然后放到List集 ...

  2. Linq查询datatable的记录集合

    通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...

  3. 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

    DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...

  4. 泛型的运用(用于查询数据后DataTable转实体类)

    2019.8.14 更新 补全了DataTable转泛型集合的方法: /// <summary> /// DataTable转实体类集合 /// </summary> /// ...

  5. MVC3.0----整理之一

    1.ViewBag对象是动态解析对象 @{ ViewBag.Title = "Insert"; } 不仅可以把单个的对象绑定到 ViewBag上,还可以直接绑定List ViewB ...

  6. [C#对Oracle操作]C#操作调用Orcale存储过程有参数

    /// <summary> /// 获取ERP固定资产计提数据 /// </summary> /// <param name="strCompanyCode&q ...

  7. C# 数据操作工具类

    CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...

  8. table转list

    DataTable数据集转换为List非泛型以及泛型方式 前言 DataTable是断开式的数据集合,所以一旦从数据库获取,就会在内存中创建一个数据的副本,以便使用.由于在实际项目中,经常会将 Dat ...

  9. C# ftp 图片上传多快好省

    前言 此篇讲到的是图片上传功能,每个网站必定会有这样类似的功能,上传文件.上传图片等等.那么接下来,看看我们EF+uploadfile+ftp如何玩转上传图片吧 效果预览 具体实现 一个简单数据库 只 ...

随机推荐

  1. GRUB2 分析 (三)

    接上一篇 从地址0x8200开始的是lzma_decompress.img.这是由startup_raw.S编译生成的.这个文件稍微复杂点.首先一开始就是个跳转指令: ljmp $0, $ABS(LO ...

  2. iframe的应用量还是这么大

    以前查阅资料说iframe已经过时,不建议使用,可是在先进的2018年,你去随便打开一个网站,扔都可以见到iframe的身影,这不禁要发问:iframe的应用量为什么还是这么大? HTML5不再支持使 ...

  3. Python3.x:打包为exe执行文件(window系统)

    Python3.x:打包为exe执行文件(window系统) window系统下发布: 一.安装pyinstaller(PyInstaller 3.3.1) cmd安装命令: pip install ...

  4. JAVA基本常识及环境搭建

    JAVA基本常识及环境搭建 常用dos命令行 dir 列出当前目录下的文件以及文件夹 md 创建目录 cd 进入指定目录 cd.. 退回到上一级目录 cd/ 退回到根目录 del 删除文件 删除单个文 ...

  5. SaltStack应用grains和jinja模板-第四篇

    目标需求 1.使用jinja模板让apache配置监听本地ip地址 2.了解grains的基本使用方法 说明:实验环境是在前面的第二篇和第三篇基础上完成 实现步骤 使用grains获取ip地址信息 使 ...

  6. springboot2.1.3集成webservice及错误No operation was found with the name {...}解决办法

    1.项目使用springboot 2.1.3版本,集成webservice使用的依赖如下 <parent> <groupId>org.springframework.boot& ...

  7. Centos7.5静默安装Oracle18c

    环境: CentOS7.5.Oracle18c(LINUX.X64_180000_db_home.zip) 1. 安装必要的依赖包 [root@bogon ~]# yum install bc bin ...

  8. Tachyon:Spark生态系统中的分布式内存文件系统

    转自: http://www.csdn.net/article/2015-06-25/2825056  摘要:Tachyon把内存存储的功能从Spark中分离出来, 使Spark可以更专注计算的本身, ...

  9. HDU1698 just a Hook - 带有lazy标记的线段树

    2017-08-30 16:44:33 writer:pprp 上午刚刚复习了一下不带有lazy标记的线段树, 下午开始学带有lazy标记的线段树 这个是我看大佬代码敲的,但是出了很多问题, 这提醒我 ...

  10. 在centos7上安装部署hadoop2.7.3和spark2.0.0

    一.安装装备 下载安装包: vmware workstations pro 12 三台centos7.1 mini 虚拟机 网络配置NAT网络如下: 二.创建hadoop用户和hadoop用户组 1. ...