using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Test.DButility
{
public class DatableToList<T> where T : new()
{
public static List<T> ToList(string sql)
{
DBHelperSQL db = new DBHelperSQL();
DataTable dt = db.fsQuery(sql);
List<T> list = new List<T>();
if (dt != null && dt.Rows.Count > 0)
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (DataRow dr in dt.Rows)
{
t = new T();
foreach (PropertyInfo pi in propertys)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite) continue;
object value = dr[pi.Name];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
list.Add(t);
}
}
return list;
}
public async static Task<List<T>> ToListAsync(string sql)
{
DataTable dt = await DBHelperSQL.QuerySqlAsync(sql);
List<T> list = new List<T>();
if (dt != null && dt.Rows.Count > 0)
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (DataRow dr in dt.Rows)
{
t = new T();
foreach (PropertyInfo pi in propertys)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite) continue;
object value = dr[pi.Name];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
list.Add(t);
}
}
return list;
}
public static T ToModel(string sql)
{
DBHelperSQL db = new DBHelperSQL();
T t = new T();
DataTable dt = db.fsQuery(sql);
if (dt != null && dt.Rows.Count > 0)
{
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (DataRow dr in dt.Rows)
{
t = new T();
foreach (PropertyInfo pi in propertys)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite) continue;
object value = dr[pi.Name];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
}
}
return t;
}
public static List<T> ToList(string sql, int pageindex, int pagesize, out int sumcount, out decimal PageCount)
{
DBHelperSQL db = new DBHelperSQL();
sumcount = db.fsQuery(sql).Rows.Count;
if (pageindex > 0 && pagesize > 0)
{
int startIndex = (pageindex - 1) * pagesize;
sql = sql + $" limit {startIndex} , {pagesize}";
PageCount = Math.Ceiling(Convert.ToDecimal(sumcount) / Convert.ToDecimal(pagesize));
if (pageindex < 1) pageindex = 1;
if (pageindex > PageCount && PageCount > 0) pageindex = Convert.ToInt32(PageCount);
}
else
{
PageCount = 1m;
}
DataTable dt = db.fsQuery(sql);
List<T> list = new List<T>();
if (dt != null && dt.Rows.Count > 0)
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (DataRow dr in dt.Rows)
{
t = new T();
foreach (PropertyInfo pi in propertys)
{
if (dt.Columns.Contains(pi.Name))
{
if (!pi.CanWrite) continue;
object value = dr[pi.Name];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
list.Add(t);
}
}
return list;
}
public static ResultModelNew<PageModelNew<List<T>>> ToPageList(String sql, int PageIndex, int PageSize)
{
ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
try
{
var returnlist = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
pagemode.Count = sumcount;
pagemode.ListData = returnlist;
pagemode.PageCount = PageCount;
request.ResultData = pagemode;
request.code = 1;
request.Message = "成功";
}
catch (Exception e)
{
request.code = 0;
request.Message = "分页异常:";
return request;
}
return request;
}
public static async Task<ResultModelNew<PageModelNew<List<T>>>> ToPageListAsync(String sql, int PageIndex, int PageSize)
{
ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
try
{
var returnlist = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
pagemode.Count = sumcount;
pagemode.ListData = returnlist;
pagemode.PageCount = PageCount;
request.ResultData = pagemode;
request.code = 1;
request.Message = "成功";
}
catch (Exception e)
{
request.code = 0;
request.Message = "分页异常:";
return request;
}
return request;
}
public static ResultModelNew<PageModelNew<List<T>>> ToPageSkipList(List<T> list, int PageIndex, int PageSize)
{
ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
try
{
pagemode.Count = list.Count;
if (PageIndex == null || PageSize == null || PageIndex == 0 || PageSize == 0)
{
pagemode.ListData = list;
}
else
{
pagemode.PageCount = Math.Ceiling(Convert.ToDecimal(pagemode.Count / PageSize));
pagemode.ListData = list.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
}
request.ResultData = pagemode;
request.code = 1;
request.Message = "成功";
}
catch (Exception e)
{
request.code = 0;
request.Message = "分页异常:";
return request;
}
return request;
}
public static ResultModelNew<PageModelNew<List<T>>> ToPageSkipList(string sql, int PageIndex, int PageSize)
{
ResultModelNew<PageModelNew<List<T>>> request = new ResultModelNew<PageModelNew<List<T>>>();
PageModelNew<List<T>> pagemode = new PageModelNew<List<T>>();
try
{
var list = ToList(sql, PageIndex, PageSize, out int sumcount, out decimal PageCount);
pagemode.Count = list.Count;
if (PageIndex == null || PageSize == null || PageIndex == 0 || PageSize == 0)
{
pagemode.ListData = list;
}
else
{
pagemode.PageCount = Math.Ceiling(Convert.ToDecimal(pagemode.Count / PageSize));
pagemode.ListData = list.Skip((PageIndex - 1) * PageSize).Take(PageSize).ToList();
}
request.ResultData = pagemode;
request.code = 1;
request.Message = "成功";
}
catch (Exception e)
{
request.code = 0;
request.Message = "分页异常:";
return request;
}
return request;
}
}
}
转换后使用返回数据类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test.DButility
{
class ToPageListModel
{
}
[Serializable]
public class ResultModelNew
{
/// <summary>
/// 消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 成功状态0查询成功,1失败
/// </summary>
public int code { get; set; }
public string data { get; set; }
}
[Serializable]
public class ResultModelNew<T> : ResultModelNew
{
//需要返回前端的数据
public T ResultData { get; set; }
}
[Serializable]
public class QueryPollingResultModelNew<T> : ResultModelNew
{
//需要返回的数据
public T ResultData { get; set; }
public string Sign { get; set; }
public string Ratio { get; set; }
}
[Serializable]
public class PageModelNew<T>
{
public Decimal PageCount { get; set; }
public Decimal Count { get; set; }
public T ListData { get; set; }
}
}
3.swagger返回参数类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Test.DButility
{
public class PatientResponse
{
}
/// <summary>
/// 获取授权入参
/// </summary>
public sealed class ResponseBasic
{
/// <summary>
/// 成功
/// </summary>
/// <param name="t"></param>
/// <param name="code"></param>
/// <param name="message"></param>
/// <returns></returns>
public static ResponseBasic ToSuccess(dynamic t, string code = "1", string message = "成功") =>
new ResponseBasic()
{
data = t,
code = code,
message = message,
};
/// <summary>
/// 异常
/// </summary>
/// <param name="code"></param>
/// <param name="message"></param>
/// <returns></returns>
public static ResponseBasic ToError(string code = "0", string message = "异常") =>
new ResponseBasic()
{
data = null,
code = code,
message = message
};
/// <summary>
/// 失败
/// </summary>
/// <param name="t"></param>
/// <param name="code"></param>
/// <param name="message"></param>
/// <returns></returns>
public static ResponseBasic ToSuccessFalse(dynamic t, string code = "1", string message = "未查询到数据") =>
new ResponseBasic()
{
data = t,
code = code,
message = message
};
/// <summary>
/// 失败
/// </summary>
/// <param name="t"></param>
/// <param name="code"></param>
/// <param name="message"></param>
/// <returns></returns>
public static ResponseBasic ToFalse(string message, dynamic t = null, string code = "0") =>
new ResponseBasic()
{
data = t,
code = code,
message = message
};
public string message { get; set; }
public string code { get; set; }
public dynamic data { get; set; }
}
public class RepNameAttribute : Attribute
{
/// <summary>
/// 显示的名称
/// </summary>
public string Name { get; set; }
public RepNameAttribute(string Name)
{
this.Name = Name;
}
/// <summary>
/// 利用特性给实体赋值
/// </summary>
/// <typeparam name="T">返回实体</typeparam>
/// <typeparam name="S"></typeparam>
/// <param name="s"></param>
/// <param name="name">特性对应属性名称</param>
/// <returns></returns>
public static List<T> PatReqMod<T, S>(S s, string attrName)
{
List<T> tlist = new();
Type t = typeof(T);
PropertyInfo[] pc = t.GetProperties();//获取到泛型所有属性的集合
Type objType = typeof(S);
foreach (PropertyInfo propInfo in objType.GetProperties())
{
//取属性上的自定义特性
object[] objAttrs = propInfo.GetCustomAttributes(typeof(RepNameAttribute), true);
if (objAttrs.Length > 0)
{
var value = propInfo.GetValue(s);
RepNameAttribute attr = objAttrs[0] as RepNameAttribute;
T _obj = Activator.CreateInstance<T>();
foreach (PropertyInfo pi in pc)
{
if (pi.PropertyType.Equals(typeof(string)))//判断属性的类型是不是String
{
if (pi.Name == attrName)
pi.SetValue(_obj, attr.Name, null);//特性名称赋值
else
pi.SetValue(_obj, value, null);//其他属性赋值
}
}
tlist.Add(_obj);
}
}
return tlist;
}
}
}