当前位置: 首页 > web >正文

ListExtension 扩展方法增加 转DataTable()方法

方法

        1.判断集合是否为Null

        2.判断集合是否不为Null

        3.判断集合是否有值

        4.拼接成字符串

        5.根据一个表达式去除重复

        6.转DataTable 泛型对象转换方法

/// <summary>
/// 集合扩展方法
/// </summary>
public static class ListExtension
{/// <summary>/// 判断集合是否为Null/// </summary>/// <typeparam name="T"></typeparam>/// <param name="list"></param>/// <returns></returns>public static bool IsNull<T>(this IEnumerable<T> list){return list == null;}/// <summary>/// 判断集合是否不为Null/// </summary>/// <typeparam name="T"></typeparam>/// <param name="list"></param>/// <returns></returns>public static bool IsNotNull<T>(this IEnumerable<T> list){return list != null;}/// <summary>/// 判断集合是否有值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="list"></param>/// <returns></returns>public static bool IsHaveVal<T>(this IEnumerable<T> list){return list != null && list.Count() > 0;}/// <summary>/// 拼接成字符串/// </summary>/// <param name="list"></param>/// <param name="split">分隔筏</param>/// <returns></returns>public static string JoinToString(this IEnumerable<int> list, string split){if (list != null)return string.Join(split, list);return string.Empty;}/// <summary>/// 拼接成字符串/// </summary>/// <param name="list"></param>/// <param name="split">分隔筏</param>/// <returns></returns>public static string JoinToString(this IEnumerable<string> list, string split){if (list != null)return string.Format("'{0}'",string.Join("'" + split + "'", list));return string.Empty;}/// <summary>/// 根据一个表达式去除重复/// </summary>/// <typeparam name="TSource">数据源类型</typeparam>/// <typeparam name="TKey">过滤属性类型</typeparam>/// <param name="source">数据源集合</param>/// <param name="keySelector">过滤表达式</param>/// <returns></returns>public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector){HashSet<TKey> seenKeys = new HashSet<TKey>();foreach (TSource element in source){if (seenKeys.Add(keySelector(element))){yield return element;}}}/// <summary>/// 转DataTable 泛型对象转换方法/// </summary>/// <typeparam name="T"></typeparam>/// <param name="items"></param>/// <returns></returns>public static DataTable ToDataTable<T>(this List<T> items){DataTable dt = new DataTable(typeof(T).Name);// 创建列var props = typeof(T).GetProperties().ToList();foreach (PropertyInfo prop in props){dt.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);}// 填充数据foreach (T item in items){DataRow row = dt.NewRow();foreach (PropertyInfo prop in props){row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;}dt.Rows.Add(row);}return dt;}/// <summary>/// 转DataTable  泛型对象转换方法/// </summary>/// <typeparam name="T"></typeparam>/// <param name="items"></param>/// <param name="columnList">数据库中列集合</param>/// <returns></returns>public static DataTable ToDataTableSTMF<T>(this List<T> items, List<string> columnList){DataTable dt = new DataTable(typeof(T).Name);// 创建列var props = typeof(T).GetProperties().ToList();foreach (var colName in columnList){var prop = props.FirstOrDefault(t => t.Name == colName);dt.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);}int count = 0;// 填充数据foreach (T item in items){//if (count > 10)//{//    break;//}DataRow row = dt.NewRow();foreach (DataColumn itemColumn in dt.Columns){var prop = props.FirstOrDefault(t => t.Name == itemColumn.ColumnName);switch (prop.PropertyType.Name){case "Int32":case "Decimal":row[prop.Name] = prop.GetValue(item, null) ?? 0;break;case "String":row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;break;case "Boolean":var valBit = prop.GetValue(item, null).ToBoolean();row[prop.Name] = valBit;break;default:row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;break;}}#region MyRegion//foreach (PropertyInfo prop in props)//{//    if (!_insertExcludeColumns.Contains(prop.Name))//    {//        //row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;//        switch (prop.PropertyType.Name)//        {//            case "Int32"://            case "Decimal"://                row[prop.Name] = prop.GetValue(item, null) ?? 0;//                break;//            case "String"://                row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;//                break;//            case "Boolean"://                var valBit = prop.GetValue(item, null).ToBoolean();//                row[prop.Name] = valBit;//                break;//            default://                row[prop.Name] = prop.GetValue(item, null) ?? string.Empty;//                break;//        }//        //row[prop.Name] = prop.GetValue(item, null) ?? DBNull.Value;//    }//} #endregiondt.Rows.Add(row);count++;}return dt;}
}

http://www.xdnf.cn/news/14806.html

相关文章:

  • Lua现学现卖
  • DOP数据开放平台(真实线上项目)
  • 电商返利APP架构设计:如何基于Spring Cloud构建高并发佣金结算系统
  • OpenLayers 下载地图切片
  • 解决cursor无法下载插件等网络问题
  • vue-29(创建 Nuxt.js 项目)
  • 从用户到权限:解密 AWS IAM Identity Center 的授权之道
  • 给定一个没有重复元素的数组,写出生成这个数组的MaxTree的函数
  • TDengine 如何使用 MQTT 采集数据?
  • lambda、function基础/响应式编程基础
  • [论文阅读] 软件工程 | 微前端在电商领域的实践:一项案例研究的深度解析
  • NLP中的同义词替换及我踩的坑
  • 创客匠人视角:创始人 IP 打造为何成为知识变现的核心竞争力
  • 【算法深练】单调栈:有序入栈,及时删除垃圾数据
  • 鸿蒙5:组件监听和部分状态管理V2
  • 为何需要防爆平板?它究竟有何能耐?
  • 【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】
  • 学习使用dotnet-dump工具分析.net内存转储文件(2)
  • vue-28(服务器端渲染(SSR)简介及其优势)
  • 舵机在不同类型机器人中的应用
  • Python 数据分析与可视化 Day 10 - 数据合并与连接
  • Linux的top指令CPU占用率详解(白话版)——Linux进阶常用知识点
  • 网络缓冲区
  • uni-app项目实战笔记26--uniapp实现富文本展示
  • 展开说说:Android之ContentProvider源码浅析
  • 机器学习算法-K近邻算法-KNN
  • Linux tcp_info:监控TCP连接的秘密武器
  • Day44 预训练模型
  • OpenCV图像添加水印
  • Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧