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(); } } }