Encapsulation of conversion between some datatable and ilist

Source: Internet
Author: User
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;        }    }

 

Encapsulation of conversion between some datatable and ilist

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.