• dt常用类


    经常使用的一些datatable的操作,包括一些过滤去重的方法

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    
    namespace TravcomRptTest.Common
    {
        public abstract class Dt
        {
            #region 按条件过滤DataTable
            public static DataTable TblFilter(DataTable sourceTable, string condition)
            {
                var tempDt = sourceTable.Clone();
                var rows = sourceTable.Select(condition);
                foreach (var dr in rows)
                {
                    tempDt.ImportRow(dr);
                }
                return tempDt;
            }
    
            public static DataTable TblFilter(DataTable sourceTable, string condition, string[] columns)
            {
                var tempDt = new DataTable();
                foreach (var t in columns)
                {
                    tempDt.Columns.Add(t, typeof(String));
                }
                var rows = sourceTable.Select(condition);
                foreach (var dr in rows)
                {
                    var newDr = tempDt.NewRow();
                    foreach (var t in columns)
                    {
                        newDr[t.Split(':')[0]] = dr[t.Split(':')[0]].ToString();
                    }
                    tempDt.Rows.Add(newDr);
                }
                return tempDt;
            }
            #endregion
            #region 按条件过滤DataTable,并排序
            public static DataTable TblFilter(DataTable sourceTable, string condition, string orderBy)
            {
                var tempDt = sourceTable.Clone();
                var rows = sourceTable.Select(condition, orderBy);
                foreach (var dr in rows)
                {
                    tempDt.ImportRow(dr);
                }
                return tempDt;
            }
            #endregion
            #region 筛选不重复的sourceColumn数据,单Column
            public static DataTable TblDistinct(DataTable sourceTable, string sourceColumn)
            {
                try
                {
                    var result = sourceTable.Clone();
                    var ht = new Hashtable();
                    foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[sourceColumn])))
                    {
                        ht.Add(dr[sourceColumn], null);
                        var newRow = result.NewRow();
                        newRow.ItemArray = dr.ItemArray;
                        result.Rows.Add(newRow);
                    }
                    return result;
                }
                catch (Exception)
                {
                    return null;
                }
            }
            #endregion
            #region 筛选不重复的sourceColumn数据,单Column,指定数据类型
            public static DataTable TblDistinct(DataTable sourceTable, string sourceColumn, Type columnType)
            {
                var result = sourceTable.Clone();
                result.TableName = "DT";
                result.Columns[sourceColumn].DataType = columnType;
                try
                {
                    var ht = new Hashtable();
                    foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[sourceColumn])))
                    {
                        ht.Add(dr[sourceColumn], null);
                        var newRow = result.NewRow();
                        newRow.ItemArray = dr.ItemArray;
                        result.Rows.Add(newRow);
                    }
                    return result;
                }
                catch (Exception)
                {
                    return null;
                }
            }
            #endregion
            #region 筛选不重复的sourceColumn数据,双Column
            public static DataTable TblDistinct(DataTable sourceTable, string key1, string key2)
            {
                try
                {
                    var result = sourceTable.Clone();
                    var ht = new Hashtable();
                    foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[key1] + dr[key2].ToString())))
                    {
                        ht.Add(dr[key1] + dr[key2].ToString(), null);
                        var newRow = result.NewRow();
                        newRow.ItemArray = dr.ItemArray;
                        result.Rows.Add(newRow);
                    }
                    return result;
                }
                catch (Exception)
                {
                    return null;
                }
            }
            #endregion
            #region 筛选不重复的sourceColumn数据,多Column
            public static DataTable TblDistinct(DataTable sourceTable, string[] arrKey)
            {
                try
                {
                    var result = sourceTable.Clone();
                    var ht = new Hashtable();
                    foreach (DataRow dr in sourceTable.Rows)
                    {
                        var strKey = arrKey.Aggregate(string.Empty, (current, t) => current + dr[t]);
                        if (ht.ContainsKey(strKey)) continue;
                        ht.Add(strKey, null);
                        var newRow = result.NewRow();
                        newRow.ItemArray = dr.ItemArray;
                        result.Rows.Add(newRow);
                    }
                    return result;
                }
                catch (Exception)
                {
                    return null;
                }
            }
            #endregion
            #region 获取单一值
            public static string GetSingle(string columnName, string condition, DataTable dt)
            {
                try
                {
                    return TblFilter(dt, condition).Rows[0][columnName].ToString();
                }
                catch
                {
                    return string.Empty;
                }
            }
            //获取单一值,为空返回默认值
            public static string GetSingle(string columnName, string condition, DataTable dt, string defaultValue)
            {
                string strReturn;
                try
                {
                    strReturn = TblFilter(dt, condition).Rows[0][columnName].ToString();
                }
                catch
                {
                    strReturn = string.Empty;
                }
                if (strReturn.Trim() == "")
                {
                    strReturn = defaultValue;
                }
                return strReturn;
            }
            #endregion
            #region 获得一个带结构的DataTable
            public static DataTable GetNewTbl(string tableName)
            {
                var dt = new DataTable();
                switch (tableName)
                {
    
                    case "ConfigModel":
                        #region
                        dt.Columns.Add("Name", typeof(String));
                        dt.Columns.Add("id", typeof(String));
                        dt.Columns.Add("MI01", typeof(String));
                        #endregion
                        break;
                }
                return dt;
            }
            #endregion
    
            //public static DataTable listToTable(List<Model.Segment> segList)
            //{
            //    DataTable dt = new DataTable();
            //    dt.Columns.Add("psgqueue");
            //    dt.Columns.Add("airqueue");
            //    dt.Columns.Add("ticketno");
            //    for (int i = 0; i < segList.Count; i++)
            //    {
            //        DataRow dr = dt.NewRow();
            //        dr["psgqueue"] = segList[i].psgqueue;
            //        dr["airqueue"] = segList[i].airQueue;
            //        dr["ticketno"] = segList[i].ticketno;
            //        dt.Rows.Add(dr);
            //    }
    
            //    return dt;
            //}
    
        }
    }
                    
  • 相关阅读:
    python sendmail
    linux find命令
    10块钱去买酒,2块一瓶,2空瓶换一瓶,4盖换一瓶,问能喝到什么时候
    【转】通过经纬度坐标计算距离的方法(经纬度距离计算)
    Android应用开发相关下载资源(2015/3/20更新)
    使用Entity Framework访问MySQL数据库
    VS2013+EF6.1+Mysql配置心路历程
    SQL-LINQ-Lambda语法对照实例
    百度统计今晚更新了,统计的数据报表格式都大变样了,少不了我的功劳吧!跟类似yoyooho.com的小伙伴说再见啦
    跟踪那些像www.yoyooho.com非友链带来的百度统计数据解析【第三篇】
  • 原文地址:https://www.cnblogs.com/Lvkang/p/10750254.html
Copyright © 2020-2023  润新知