多项功能优化

This commit is contained in:
GG Z
2024-12-22 10:26:12 +08:00
parent 77655c9ef5
commit 83b846f15f
66 changed files with 5424 additions and 2927 deletions

View File

@@ -8,148 +8,134 @@ namespace Sai.Toolkit.Core.Extensions;
public static class DataTableExtensions
{
/// <summary>
/// 获取数据
/// </summary>
/// <param name="dt"></param>
/// <param name="row"></param>
/// <param name="column"></param>
/// <returns></returns>
public static string GetValue(this DataTable dt, int row, int column)
{
return dt != null ? dt.Rows[row][column].ToString() : string.Empty;
}
{
return dt != null ? dt.Rows[row][column].ToString() : string.Empty;
}
/// <summary>
/// 获取值
/// </summary>
/// <param name="dr"></param>
/// <param name="column"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static string GetValue(this DataRow dr, int column)
{
return dr == null ? throw new ArgumentNullException() : dr[column].ToString();
}
{
return dr == null ? throw new ArgumentNullException(nameof(dr)) : dr[column].ToString();
}
/// <summary>
/// 设置值
/// </summary>
/// <param name="dt"></param>
/// <param name="row"></param>
/// <param name="column"></param>
/// <param name="value"></param>
public static void SetValue(this DataTable dt, int row, int column, object value)
{
dt.Rows[row][column] = value;
}
{
dt.Rows[row][column] = value;
}
/// <summary>
/// 设置值
/// </summary>
/// <param name="dr"></param>
/// <param name="column"></param>
/// <param name="value"></param>
/// <exception cref="ArgumentNullException"></exception>
public static void SetValue(this DataRow dr, int column, object value)
{
if (dr == null)
{
throw new ArgumentNullException();
}
{
if (dr == null)
{
throw new ArgumentNullException(nameof(dr));
}
dr[column] = value;
}
dr[column] = value;
}
/// <summary>
/// 转实体,属性名必须与列名相同
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <returns></returns>
public static List<T> ToEntities<T>(this DataTable table)
where T : new()
{
var entities = new List<T>();
if (table == null)
{
return null;
}
/// <summary>
/// 转实体,属性名必须与列名相同
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="table"></param>
/// <returns></returns>
public static List<T> ToEntities<T>(this DataTable table)
where T : new()
{
var entities = new List<T>();
if (table == null)
{
return null;
}
foreach (DataRow row in table.Rows)
{
T entity = new();
foreach (var item in entity.GetType().GetProperties())
{
if (table.Columns.Contains(item.Name))
{
if (DBNull.Value != row[item.Name])
{
var newType = item.PropertyType;
//判断type类型是否为泛型因为nullable是泛型类,
if (newType.IsGenericType && newType.GetGenericTypeDefinition() == typeof(Nullable<>)) //判断convertsionType是否为nullable泛型类
{
//如果type为nullable类声明一个NullableConverter类该类提供从Nullable类到基础基元类型的转换
var nullableConverter = new System.ComponentModel.NullableConverter(newType);
//将type转换为nullable对的基础基元类型
newType = nullableConverter.UnderlyingType;
}
foreach (DataRow row in table.Rows)
{
T entity = new();
foreach (var item in entity.GetType().GetProperties())
{
if (table.Columns.Contains(item.Name))
{
if (DBNull.Value != row[item.Name])
{
var newType = item.PropertyType;
//判断type类型是否为泛型因为nullable是泛型类,
if (newType.IsGenericType && newType.GetGenericTypeDefinition() == typeof(Nullable<>)) //判断convertsionType是否为nullable泛型类
{
//如果type为nullable类声明一个NullableConverter类该类提供从Nullable类到基础基元类型的转换
var nullableConverter = new System.ComponentModel.NullableConverter(newType);
//将type转换为nullable对的基础基元类型
newType = nullableConverter.UnderlyingType;
}
item.SetValue(entity, Convert.ChangeType(row[item.Name], newType), null);
}
}
}
item.SetValue(entity, Convert.ChangeType(row[item.Name], newType), null);
}
}
}
entities.Add(entity);
}
entities.Add(entity);
}
return entities;
}
return entities;
}
/// <summary>
/// 将指定的集合转换成DataTable。
/// </summary>
/// <param name="list">将指定的集合。</param>
/// <returns>返回转换后的DataTable。</returns>
public static DataTable ToDataTable(IList list)
{
var table = new DataTable();
if (list.Count > 0)
{
var properties = list[0].GetType().GetProperties();
foreach (var pi in properties)
{
var pt = pi.PropertyType;
if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>))
{
pt = pt.GetGenericArguments()[0];
}
/// <summary>
/// 将指定的集合转换成DataTable。
/// </summary>
/// <param name="list">将指定的集合。</param>
/// <returns>返回转换后的DataTable。</returns>
public static DataTable ToDataTable(this IList list)
{
var table = new DataTable();
table.Columns.Add(new DataColumn(pi.Name, pt));
}
var properties = list[0].GetType().GetProperties();
foreach (var pi in properties)
{
var pt = pi.PropertyType;
if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>))
{
pt = pt.GetGenericArguments()[0];
}
for (var i = 0; i < list.Count; i++)
{
var tempList = new ArrayList();
foreach (var pi in properties)
{
var obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
table.Columns.Add(new DataColumn(pi.Name, pt));
}
var array = tempList.ToArray();
table.LoadDataRow(array, true);
}
}
for (var i = 0; i < list.Count; i++)
{
var tempList = new ArrayList();
foreach (var pi in properties)
{
var obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
return table;
}
public static DataTable ToDataTable<T>(this List<T> list)
{
var table = new DataTable();
//创建列头
var properties = typeof(T).GetProperties();
foreach (var pi in properties)
{
var pt = pi.PropertyType;
if (pt.IsGenericType && pt.GetGenericTypeDefinition() == typeof(Nullable<>))
{
pt = pt.GetGenericArguments()[0];
}
table.Columns.Add(new DataColumn(pi.Name, pt));
}
//创建数据行
if (list.Count > 0)
{
for (var i = 0; i < list.Count; i++)
{
var tempList = new ArrayList();
foreach (var pi in properties)
{
var obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
var array = tempList.ToArray();
table.LoadDataRow(array, true);
}
}
return table;
}
var array = tempList.ToArray();
table.LoadDataRow(array, true);
}
return table;
}
}

View File

@@ -10,10 +10,15 @@ namespace Sai.Toolkit.Core.Extensions;
public static class ImageExtensions
{
/// <summary>
/// 提取资源
/// </summary>
/// <param name="resourceName"></param>
/// <param name="path"></param>
public static void ExtractResource(string resourceName, string path)
{
using var manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName);
using Stream stream = File.Create(path);
using var stream = File.Create(path);
var array = new byte[8192];
int count;
while ((count = manifestResourceStream.Read(array, 0, array.Length)) > 0)
@@ -34,7 +39,12 @@ public static class ImageExtensions
var bm = WindowsThumbnailProvider.GetThumbnail(filename, width, height, ThumbnailOptions.None);
return Imaging.CreateBitmapSourceFromHBitmap(bm.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
/// <summary>
/// 位图转图片
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static BitmapImage ToBitmapImage(this Bitmap bitmap)
{
if (bitmap is null)
@@ -59,13 +69,18 @@ public static class ImageExtensions
return result;
}
/// <summary>
/// 位图转像素集
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static BitmapSource ToBitmapSource(this Bitmap bitmap)
{
if (bitmap == null)
{
return null;
}
throw new ArgumentNullException(nameof(bitmap));
}
return Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}