datatable、sql转list加分页

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值