软测单独项目
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

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