码迷,mamicode.com
首页 > 其他好文 > 详细

DataTable转换成IList<T>的简单实现

时间:2015-06-30 23:19:05      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

DataTable的无奈

很多时候,我们需要去操作DataTable。但DataTable的操作,实在是太不方便了。Linq?lambda表达式?统统没有...

特别是对现有结果集做进一步筛选,这样的高频率动作,DataTable却无能为力。

 

网上很多朋友说用反射实现。那么问题来了,一定要用反射吗?

下面我们用一个不用反射的方式实现:

TableToList类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

/// <summary>
/// DataTable转换成IList
/// </summary>
/// <typeparam name="T"></typeparam>
public class TableToList<T> where T : class, new()
{
    public static IList<T> ToList(DataTable dt, Func<DataRow, T> func)
    {
        if (dt == null || dt.Rows.Count == 0)
        {
            return null;
        }
        IList<T> list = new List<T>(dt.Rows.Count);
        foreach (DataRow dr in dt.Rows)
        {
            list.Add(func(dr));
        }
        return list;
    }
}

调用

DataTable dtCheck = SQLHelper.ExecDataTable2(string.Format("select * from PortCheckProj WHERE SAPCode=‘{0}‘", list.First().DefID));
        IList<CheckModel> list_check = TableToList<CheckModel>.ToList(dtCheck, DataRowToCheckModel);

其中,DataRowToCheckModel方法

    private CheckModel DataRowToCheckModel(DataRow dr)
    {
        CheckModel item = new CheckModel();
        item.SAPCode = Convert.ToString(dr["SAPCode"]);
        item.CheckProj = Convert.ToString(dr["CheckProj"]);
        item.Uom = Convert.ToString(dr["Uom"]);
        item.TargetNum = Convert.ToDouble(dr["TargetNum"]);
        item.Operate = Convert.ToString(dr["Operate"]);
        return item;
    }

CheckModel是一个实体类,实际要求一般与DataTable栏位对应。

ok。转换完成。

小结

本篇文章主要讲述DataTable转换成泛型集合的一个简单实例,并给出核心代码。

您还有更简便的方法吗?欢迎留言交流~ 

DataTable转换成IList<T>的简单实现

标签:

原文地址:http://www.cnblogs.com/hangwei/p/4611634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!