zoukankan      html  css  js  c++  java
  • DataTable转换成IList<T>的简单实现

    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转换成泛型集合的一个简单实例,并给出核心代码。

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

  • 相关阅读:
    [TJOI2007]小朋友
    弦图小结
    Bzoj2141: 排队
    [SYZOI Round1] 滑稽♂树
    Bzoj2244: [SDOI2011]拦截导弹
    Bzoj1492: [NOI2007]货币兑换Cash(不单调的斜率优化)
    Bzoj1495: [NOI2006]网络收费
    Bzoj1496: [NOI2006]千年虫
    Bzoj1498&1416: [NOI2006]神奇的口袋
    Bzoj4553: [Tjoi2016&Heoi2016]序列
  • 原文地址:https://www.cnblogs.com/hangwei/p/4611634.html
Copyright © 2011-2022 走看看