最近比较忙,好久没写博客了。个人感觉最好的进步就是写东西。哈哈。

一般我们使用ADO.net从数据库中读取数据返回的集合是DataSet类型的。有时候我们需要进行转换成List<T>集合。一般的做法是在DAL层中,写个方法进行转换。(每个表写一个)。累哦!~

所以我就想,能不能写个工厂,传入DataSet 集合 和 需要转化的类的类型。就自动转化了。就有了下面的代码了。

         /// <summary>
/// Dataset 集合根据传入的 类型。自动转换List集合"
/// </summary>
/// <typeparam name="T">类(属性类 modle)</typeparam>
/// <param name="ds">数据集合</param>
/// <returns>List集合</returns>
public List<T> GetListbyDataSet<T>(DataSet ds) where T: new()
{
List<T> li = new List<T>(); //声明要返回的集合
var s = typeof(T); // 获取传入类型
var str = s.GetProperties(); // 获取传入类型的属性集合
if (ds.Tables[] == null || ds.Tables[].Rows.Count < ) //判断ds的null和是否包含数据
{
return li;
}
for (int i = ; i < ds.Tables[].Rows.Count; i++) //循环集合准备获取数据
{
T t1 = new T(); // 声明类
foreach (var item in str) // 循环类的属性
{
string itemstr = item.Name; //类属性名称
var itemtype = item.PropertyType; // 类属性的类型(int string datetime)
object value = GetvalbyDataSet(itemstr, itemtype, ds.Tables[].Rows[i]); //获取值
item.SetValue(t1, value, null); }
li.Add(t1);
}
return li;
}
  /// <summary>
/// 在DataRow中 获取 对应列的值
/// </summary>
/// <param name="colname">列名称</param>
/// <param name="colname">列的类型</param>
/// <param name="dr">DataRow 集合</param>
/// <returns>列值</returns>
private object GetvalbyDataSet(string colname,Type coltype, DataRow dr)
{
if (dr.Table.Columns.Contains(colname))
{
if (typeof(int) == coltype)
{
return dr[colname] == null ? : int.Parse(dr[colname].ToString());
}
if (typeof(DateTime) == coltype)
{
return dr[colname] == null ? DateTime.Parse("2016/9/22") : DateTime.Parse(dr[colname].ToString());
}
if (typeof(decimal) == coltype)
{
return dr[colname] == null ? decimal.Parse("") : decimal.Parse(dr[colname].ToString());
}
string str = dr[colname] == null ? "" : dr[colname].ToString();
return str;
}
else
{
return "";
}
}

DataSet集合直接根据传入的类转List<T>集合的更多相关文章

  1. JAVA异常处理、常用类、反射、集合

    异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指E ...

  2. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  3. Java:类集框架中集合的学习

    Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...

  4. 浅谈集合框架六——集合扩展:Arrays工具类、集合与数组相互转换方式;

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  5. Collection接口【集合】和Iterator迭代器类

    1.1集合的概述 前面基础学习并使用过集合ArrayList<E>,那么集合究竟是什么呢? 集合:集合是Java中提供的一种容器,可以用来存储多个数据. 那么意思就是说集合是容器,但是容器 ...

  6. Python 集合set添加删除、交集、并集、集合操作符号

    在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...

  7. python 集合比较(交集、并集,差集)集合方法大全

    python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...

  8. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  9. 第1节 Scala基础语法:13、list集合的定义和操作;16、set集合;17、map集合

    list.+:5 , list.::5: 在list集合头部添加单个元素5 : li1.:+(5):在list集合尾部添加单个元素5: li1++li2,li1:::li2:在li1集合尾部添加il2 ...

随机推荐

  1. C#获得类的方法和方法参数

    Type t = typeof(CommonController); StringBuilder str = new StringBuilder(); MethodInfo[] methors = t ...

  2. java回调初步学习

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢以前不理解什 ...

  3. Javascript学习笔记:闭包题解(2)

    代码: var name='The Window'; var object={ name:'My Object', getNameFunc:function(){ return function(){ ...

  4. yii2 renderPartial

    在 views/news/_copyright.php 中插入以下代码: <div> This is text about copyright data for news items &l ...

  5. 被滥用的for in循环

    众所周知,javascript中有两种for循环,一种是: var a=['this','is','a','article'], i, len; for( i = 0,len = a.length;i ...

  6. git hub

    如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:git stashgit pullgit stash pop然后可以使用git diff -w +文件名 来确认代码自动合并的情况 ...

  7. mac 安装php7

    卸载php55 brew unlink php55 brew install homebrew/php/php70 安装成功信息 To enable PHP in Apache add the fol ...

  8. 正则匹配中 ^ $ 和 \b 的区别

    正则匹配中 ^ $ 和 \b 的区别     ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...

  9. Tomcat APR & Linux Optimization

    一.简介 APR(Apache portable Run-time libraries)模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高 ...

  10. roundabout插件使用(3d旋转轮播图)兼容IE8

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...