using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Dynamic;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.AMS.Common
|
{
|
/// <summary>
|
/// datatable以及list相互转换
|
/// </summary>
|
/// <history>HanHe[FJ] CREATER 20161014</history>
|
public static class DTList
|
{
|
// <summary>
|
/// DataTable转换成List<T>
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="table"></param>
|
/// <returns></returns>
|
public static List<T> GetList<T>(DataTable table)
|
{
|
List<T> list = new List<T>();
|
T t = default(T);
|
PropertyInfo[] propertypes = null;
|
string tempName = string.Empty;
|
foreach (DataRow row in table.Rows)
|
{
|
t = Activator.CreateInstance<T>();
|
propertypes = t.GetType().GetProperties();
|
foreach (PropertyInfo pro in propertypes)
|
{
|
tempName = pro.Name;
|
if (table.Columns.Contains(tempName))
|
{
|
object value = row[tempName];
|
if (!value.ToString().Equals(""))
|
{
|
pro.SetValue(t, value, null);
|
}
|
}
|
}
|
list.Add(t);
|
}
|
return list.Count == 0 ? null : list;
|
}
|
|
/// <summary>
|
/// List<T>转换成DataTable
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="list"></param>
|
/// <returns></returns>
|
public static DataTable ConvertToDataSet<T>(IList<T> list)
|
{
|
if (list == null || list.Count <= 0)
|
{
|
return null;
|
}
|
|
DataTable dt = new DataTable(typeof(T).Name);
|
DataColumn column;
|
DataRow row;
|
|
System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
|
|
foreach (T t in list)
|
{
|
if (t == null)
|
{
|
continue;
|
}
|
|
row = dt.NewRow();
|
|
for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
|
{
|
System.Reflection.PropertyInfo pi = myPropertyInfo[i];
|
|
string name = pi.Name;
|
|
if (dt.Columns[name] == null)
|
{
|
column = new DataColumn(name, pi.PropertyType);
|
dt.Columns.Add(column);
|
}
|
|
row[name] = pi.GetValue(t, null);
|
}
|
|
dt.Rows.Add(row);
|
}
|
return dt;
|
}
|
|
/// <summary>
|
/// 将DataTable 转换成 List<dynamic>
|
/// reverse 反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
|
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
|
/// FilterField 字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数
|
/// </summary>
|
/// <param name="table">DataTable</param>
|
/// <param name="reverse">反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
|
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
|
///</param>
|
/// <param name="FilterField">字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数据</param>
|
/// <returns>List<dynamic></returns>
|
public static List<dynamic> ToDynamicList(this DataTable table, bool reverse = true, params string[] FilterField)
|
{
|
var modelList = new List<dynamic>();
|
foreach (DataRow row in table.Rows)
|
{
|
dynamic model = new ExpandoObject();
|
var dict = (IDictionary<string, object>)model;
|
foreach (DataColumn column in table.Columns)
|
{
|
if (FilterField.Length != 0)
|
{
|
//剔除
|
if (reverse == true)
|
{
|
if (!FilterField.Contains(column.ColumnName))
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
else
|
{
|
if (FilterField.Contains(column.ColumnName))
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
|
}
|
else
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
modelList.Add(model);
|
}
|
return modelList;
|
}
|
|
public static dynamic ToDynamic(DataRow row, bool reverse = true, params string[] FilterField)
|
{
|
dynamic model = new ExpandoObject();
|
var dict = (IDictionary<string, object>)model;
|
foreach (DataColumn column in row.Table.Columns)
|
{
|
if (FilterField.Length != 0)
|
{
|
//剔除
|
if (reverse == true)
|
{
|
if (!FilterField.Contains(column.ColumnName))
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
else
|
{
|
if (FilterField.Contains(column.ColumnName))
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
|
}
|
else
|
{
|
dict[column.ColumnName] = row[column] == DBNull.Value ? "" : row[column];
|
}
|
}
|
return model;
|
}
|
}
|
}
|