using NPOI.SS.Formula.Functions;
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 FangYar.Common
{
///
/// DataTable 扩展
///
public static class DataTableExtensions
{
///
/// 将DataTable 转换成 List
/// reverse 反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
/// FilterField 字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数
///
/// DataTable
///
/// 反转:控制返回结果中是只存在 FilterField 指定的字段,还是排除.
/// [flase 返回FilterField 指定的字段]|[true 返回结果剔除 FilterField 指定的字段]
///
/// 字段过滤,FilterField 为空 忽略 reverse 参数;返回DataTable中的全部数据
/// List
public static List ToDynamicList(this DataTable table, bool reverse = true, params string[] FilterField)
{
var modelList = new List();
foreach (DataRow row in table.Rows)
{
dynamic model = new ExpandoObject();
var dict = (IDictionary)model;
foreach (DataColumn column in table.Columns)
{
if (FilterField.Length != 0)
{
if (reverse == true)
{
if (!FilterField.Contains(column.ColumnName))
{
dict[column.ColumnName] = row[column];
}
}
else
{
if (FilterField.Contains(column.ColumnName))
{
dict[column.ColumnName] = row[column];
}
}
}
else
{
dict[column.ColumnName] = row[column];
}
}
modelList.Add(model);
}
return modelList;
}
public static List ConvertDataTableToGenericList(DataTable dt)
{
var columnNames = dt.Columns.Cast()
.Select(c => c.ColumnName)
.ToList();
var properties = typeof(T).GetProperties();
DataRow[] rows = dt.Select();
return rows.Select(row =>
{
var objT = Activator.CreateInstance();
foreach (var pro in properties)
{
if (columnNames.Contains(pro.Name) && !Convert.IsDBNull(row[pro.Name]))
pro.SetValue(objT, row[pro.Name]);
}
return objT;
}).ToList();
}
}
}