zoukankan      html  css  js  c++  java
  • 【代码保留】IList转DataTable

            #region 数据集互操作

            
    /// <summary>
            
    /// 将集合类转换成DataTable
            
    /// </summary>
            
    /// <param name="list">集合</param>
            
    /// <returns></returns>
            public static DataTable ToDataTable(IList list)
            {
                DataTable result 
    = new DataTable();
                
    if (list.Count > 0)
                {
                    PropertyInfo[] propertys 
    = list[0].GetType().GetProperties();
                    
    foreach (PropertyInfo pi in propertys)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }

                    
    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList 
    = new ArrayList();
                        
    foreach (PropertyInfo pi in propertys)
                        {
                            
    object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        
    object[] array = tempList.ToArray();
                        result.LoadDataRow(array, 
    true);
                    }
                }
                
    return result;
            }

            
    /// <summary>
            
    /// 将泛型集合类转换成DataTable
            
    /// </summary>
            
    /// <typeparam name="T">集合项类型</typeparam>
            
    /// <param name="list">集合</param>
            
    /// <returns>数据集(表)</returns>
            public static DataTable ToDataTable<T>(IList<T> list)
            {
                
    return  ConvertX.ToDataTable<T>(list, null);
            }

            
    /// <summary>
            
    /// 将泛型集合类转换成DataTable
            
    /// </summary>
            
    /// <typeparam name="T">集合项类型</typeparam>
            
    /// <param name="list">集合</param>
            
    /// <param name="propertyName">需要返回的列的列名</param>
            
    /// <returns>数据集(表)</returns>
            public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
            {
                List
    <string> propertyNameList = new List<string>();
                
    if (propertyName != null)
                    propertyNameList.AddRange(propertyName);

                DataTable result 
    = new DataTable();
                
    if (list.Count > 0)
                {
                    PropertyInfo[] propertys 
    = list[0].GetType().GetProperties();
                    
    foreach (PropertyInfo pi in propertys)
                    {
                        
    if (propertyNameList.Count == 0)
                        {
                            result.Columns.Add(pi.Name, pi.PropertyType);
                        }
                        
    else 
                        {
                            
    if (propertyNameList.Contains(pi.Name))
                                result.Columns.Add(pi.Name, pi.PropertyType);
                        }
                    }

                    
    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList 
    = new ArrayList();
                        
    foreach (PropertyInfo pi in propertys)
                        {
                            
    if (propertyNameList.Count == 0)
                            {
                                
    object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                            
    else
                            {
                                
    if (propertyNameList.Contains(pi.Name))
                                {
                                    
    object obj = pi.GetValue(list[i], null);
                                    tempList.Add(obj);
                                }
                            }
                        }
                        
    object[] array = tempList.ToArray();
                        result.LoadDataRow(array, 
    true);
                    }
                }
                
    return result;
            }

            
    #endregion
        }

        
    public class ConvertXToDataTableTester : ITest
        {
            
    #region ITest 成员

            
    public string Name
            {
                
    get { return new ConvertXToDataTableTester().GetType().Name; }
            }

            
    public void StartRuntime()
            {
                
    //Test1(ToDataTable<>):boundary
                CollectionBase<Item> items1 = new CollectionBase<Item>();
                items1.Add(
    new Item("item1_1"1));
                items1.Add(
    new Item("item1_2""null"));
                items1.Add(
    new Item("item1_3"3));

                DataTable dt 
    = ConvertX.ToDataTable<Item>(items1);

                
    foreach (DataRow dr in dt.Rows)
                {
                    Console.WriteLine(
    "{0},{1}", dr["text"].ToString(), dr[1].ToString());
                }

                
    //Test2(ToDataTable):
                ArrayList items2 = new ArrayList();
                items2.Add(
    new Item("item2_1"3));
                items2.Add(
    new Item("item2_2"4));
                items2.Add(
    new Item("item2_3"5));

                DataTable dt2 
    = ConvertX.ToDataTable(items2);

                
    foreach (DataRow dr in dt2.Rows)
                {
                    Console.WriteLine(
    "{0},{1}", dr["text"].ToString(), dr[1].ToString());
                }

                
    //Test3(ToDataTable<>):
                IList<Item> items3 = new CollectionBase<Item>();
                items3.Add(
    new Item("item3_1"3));
                items3.Add(
    new Item("item3_2"4));
                items3.Add(
    new Item("item3_3"5));

                DataTable dt3 
    = ConvertX.ToDataTable<Item>(items3, "Text");

                
    foreach (DataRow dr in dt3.Rows)
                {
                    
    //Console.WriteLine("{0},{1}", dr["text"].ToString(), dr[1].ToString());
                    Console.WriteLine("{0}", dr["text"].ToString());
                }

                
    //Test4(ToDataTable<>):Error with error column name
                try
                {
                    
    foreach (DataRow dr in dt.Rows)
                    {
                        Console.WriteLine(dr[
    "errorName"].ToString());
                    }
                }
                
    catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            
    #endregion
        }

        
    public class Item
        {
            
    public Item(string text, object value)
            {
                
    this.text = text;
                
    this.value = value;
            }
            
    private string text;
            
    public string Text
            {
                
    get
                {
                    
    return this.text;
                }
                
    set
                {
                    
    this.text = value;
                }
            }

            
    private object value;
            
    public object Value
            {
                
    get
                {
                    
    return this.value;
                }
                
    set
                {
                    
    this.value = value;
                }
            }
        }

        public interface ITest
        
    {
            
    string Name get; }
            
    void StartRuntime();
        }

    using System;
    using System.Collections.Generic;
    using System.Text;
    using yd.Base;
    using yd.Base.Collections.Generic;
    using yd.Util;

    namespace ConsoleApplicationTester
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                
    bool debugging = false;

                CollectionBase
    <ITest> testers = new CollectionBase<ITest>();
                
    //testers.Add(new QuarterTester());
                
    //testers.Add(new ConvertXToDataTableTester());

                
    foreach (ITest tester in testers)
                
    {
                    
    if (debugging == false)
                    
    {
                        
    try
                        
    {
                            tester.StartRuntime();
                            Console.WriteLine(
    "___________________________________");
                            Console.WriteLine(tester.Name 
    + " succeed!");
                        }

                        
    catch (Exception ex)
                        
    {
                            Console.WriteLine(tester.Name 
    + " with errors!");
                            Console.WriteLine(
    "____________The error is under the line!__________");
                            Console.WriteLine(ex.Message);
                            Console.WriteLine(
    "!!!!!!!!!!!!!!!!!!!!@@@@@@@!!!!!!!!!!!!!!!!!!!!");
                        }

                    }

                    
    else
                    
    {
                        tester.StartRuntime();
                        Console.WriteLine(
    "___________________________________");
                        Console.WriteLine(tester.Name 
    + " succeed!");
                    }

                }

            }

        }

    }


    CollectionBase<T>:泛型集合类型,赋予集合业务意义,增强集合的抽象使用
  • 相关阅读:
    mysqllog
    清理:db上面的过期的binlog,释放磁盘空间。 (转)
    linux下shell命令trap
    mvc
    uci随笔
    luci 随笔
    shell脚本 整数比较
    lua学习
    OPENWRT make menuconfig错误之一
    openwrt 中make的使用
  • 原文地址:https://www.cnblogs.com/volnet/p/930439.html
Copyright © 2011-2022 走看看