C# List与DataTable的相互转化

List与Data的转化比较简单,网上也很多。但是大多都有一个Bug:当实体类有可空类型的属性时,转化会出异常(DATASET不支持System.Nullable异常

下面的方法可以避免出现这个问题。


 

①List转DataTable

#region  反射List To DataTable

/// <summary>  

/// 将集合类转换成DataTable  

/// </summary>  

/// <param name="list">集合</param>  

/// <returns></returns>  

public static DataTable ListToDataTable(IList list)

{

    DataTable result = new DataTable();

    if (list.Count > 0)

    {

        PropertyInfo[] propertys = list[0].GetType().GetProperties();



        foreach (PropertyInfo pi in propertys)

        {

            Type colType = pi.PropertyType;

            if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))

            {

                colType = colType.GetGenericArguments()[0];

            }

            result.Columns.Add(new DataColumn(pi.Name, colType));

        }



        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;

} 

 

 

 

 

你可能感兴趣的:(Datatable)