You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.3 KiB
91 lines
3.3 KiB
9 months ago
|
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
|
||
|
{
|
||
|
|
||
|
/// <summary>
|
||
|
/// DataTable 扩展
|
||
|
/// </summary>
|
||
|
public static class DataTableExtensions
|
||
|
{
|
||
|
/// <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];
|
||
|
}
|
||
|
}
|
||
|
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<T> ConvertDataTableToGenericList<T>(DataTable dt)
|
||
|
{
|
||
|
var columnNames = dt.Columns.Cast<DataColumn>()
|
||
|
.Select(c => c.ColumnName)
|
||
|
.ToList();
|
||
|
|
||
|
var properties = typeof(T).GetProperties();
|
||
|
DataRow[] rows = dt.Select();
|
||
|
return rows.Select(row =>
|
||
|
{
|
||
|
var objT = Activator.CreateInstance<T>();
|
||
|
foreach (var pro in properties)
|
||
|
{
|
||
|
if (columnNames.Contains(pro.Name) && !Convert.IsDBNull(row[pro.Name]))
|
||
|
pro.SetValue(objT, row[pro.Name]);
|
||
|
}
|
||
|
|
||
|
return objT;
|
||
|
}).ToList();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|