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

发布于:2025-06-30 ⋅ 阅读:(16) ⋅ 点赞:(0)

方法

        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;
            //    }
            //} 
            #endregion
            dt.Rows.Add(row);
            count++;
        }
        return dt;
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到