zoukankan      html  css  js  c++  java
  • 一些DataTable和IList间转换的封装

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.ComponentModel;
    using System.Reflection;
    
    public class CollectionHelper
        {
            private CollectionHelper()
            {
            }
            public static List<T> Distinct<T>(IList<T> list)
            {
                List<T> list1 = new List<T>();
                foreach (T obj in list)
                {
                    if (!list1.Contains(obj))
                        list1.Add(obj);
                }
                return list1;
            }
            public static DataTable ConvertTo<T>(IList<T> list)
            {
                DataTable table = CreateTable<T>();
                Type entityType = typeof(T);
                PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
    
                foreach (T item in list)
                {
                    DataRow row = table.NewRow();
    
                    foreach (PropertyDescriptor prop in properties)
                    {
                        object val = prop.GetValue(item);
                        if (val != null)
                            row[prop.Name] = val;
                    }
    
                    table.Rows.Add(row);
                }
    
                return table;
            }
    
            public static IList<T> ConvertTo<T>(IList<DataRow> rows)
            {
                IList<T> list = null;
    
                if (rows != null)
                {
                    list = new List<T>();
    
                    foreach (DataRow row in rows)
                    {
                        T item = CreateItem<T>(row);
                        list.Add(item);
                    }
                }
    
                return list;
            }
    
            public static IList<T> ConvertTo<T>(DataTable table)
            {
                if (table == null)
                {
                    return null;
                }
    
                List<DataRow> rows = new List<DataRow>();
    
                foreach (DataRow row in table.Rows)
                {
                    rows.Add(row);
                }
    
                return ConvertTo<T>(rows);
            }
    
            public static T CreateItem<T>(DataRow row)
            {
                T obj = default(T);
                if (row != null)
                {
                    obj = Activator.CreateInstance<T>();
    
                    foreach (DataColumn column in row.Table.Columns)
                    {
                        PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
                        try
                        {
                            object value = row[column.ColumnName];
                            prop.SetValue(obj, value, null);
                        }
                        catch
                        {
                            // You can log something here
                            throw;
                        }
                    }
                }
    
                return obj;
            }
    
            public static DataTable CreateTable<T>()
            {
                Type entityType = typeof(T);
                DataTable table = new DataTable(entityType.Name);
                PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
    
                foreach (PropertyDescriptor prop in properties)
                {
                    if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                    {
                        NullableConverter converter = new NullableConverter(prop.PropertyType);
                        table.Columns.Add(prop.Name, converter.UnderlyingType);
                    }
                    else
                        table.Columns.Add(prop.Name, prop.PropertyType);
                }
    
                return table;
            }
        }
    
  • 相关阅读:
    使用vue.js 引用阿里图标 --无法显示(报错)
    thinkphp5.0如何隐藏index.php入口文件
    thinkphp5.0--编写api,返回json格式
    小程序滑动问题(如何让底层不会跟着滑动)
    thinkphp5.0验证的封装
    git--提交代码
    小程序图片上传
    SVG分组和引用
    总结React写参数的几种方式
    React中使用echarts
  • 原文地址:https://www.cnblogs.com/hausthy/p/3979182.html
Copyright © 2011-2022 走看看