List转DataTable(反射)
List转DataTable(反射)
?
?
/// <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;
??????? }