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

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.lryc.cn/news/576915.html

相关文章:

  • 常用指令合集(DOS/Linux/git/Maven等)
  • BP-Tools21.02下载 加解密利器 金融安全交易算法工具 PCI认证工具 金融和智能卡的数据加解密和数据转换工具
  • RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制
  • 左神算法之矩阵旋转90度
  • 浮油 - 3 相分层和自由表面流 CFX 模拟
  • github上传代码步骤(http)
  • Docker安装的gitlab配置ssl证书
  • 电力协议处理框架C++版(一)
  • ECMAScript 2019(ES2019):数组与对象操作的精细化升级
  • 【linux】权限深入解析
  • Cursor 教程:用 Cursor 创建第一个 Java 项目
  • Mac homebrew 安装教程
  • 【数据集处理】基于 3D-GloBFP建筑轮廓数据 栅格化建筑数据(完整Python代码)
  • 【模拟】数⻘蛙(medium)
  • MybatisPlus-02.快速入门-入门案例
  • RagFlow 更适合企业级深度应用,FastGPT 更适合快速开发和原型验证
  • Kafka4.0初体验
  • games101 作业6
  • 从GPTs到Real智能体:目前常见的几种创建智能体方式
  • [双指针]1498. 满足条件的子序列数目
  • Mybatis多条件查询设置参数的三种方法
  • Linux系统移植15:Linux内核编译
  • 数据挖掘、机器学习与人工智能:概念辨析与应用边界
  • Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程
  • 通达信【MACD趋势增强系统】幅图(含支撑压力位)
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • WebRTC系列:(一)MacOS开发环境搭建(Vscode + Clangd)
  • 【Linux手册】进程等待:必要性剖析与wait、waitpid等多种方式实操指南
  • 循环神经网络的概念和案例
  • JavaScript中的Class类