• Table 类(数据表基类)


    只修改数据表某条记录的部分字段(究极进化):

        public class TableHelper
        {
            private Dictionary<string, object> temp;
            public Dictionary<string, object> Temp { get { return temp; } }
    
            private SqlSugarClient db;
            private HttpContext context;
            public TableHelper(SqlSugarClient db)
            {
                this.db = db;
            }
            public TableHelper(SqlSugarClient db, HttpContext context)
            {
                this.db = db;
                this.context = context;
            }
    
            /// <summary>
            /// 将对象类型的json数据转换成字典
            /// </summary>
            /// <typeparam name="T">数据表的模型类</typeparam>
            /// <param name="data">json数据</param>
            public void ToDictionary<T>(string data) where T : class
            {
                temp = new Dictionary<string, object>();        //重新实例化对象
    
                T tableobj = JsonConvert.DeserializeObject<T>(data);        //先反序列化
                Type t = tableobj.GetType();                                //获取对象的类型
    
                foreach (PropertyInfo pi in t.GetProperties())      //遍历数据表对象的属性,将属性名和属性值存进字典里
                {
                    if (pi.Name == "id")
                    { }
                    else
                    {
                        Object value = pi.GetValue(tableobj);
                        if (value != null)
                        {
                            temp.Add(pi.Name, pi.GetValue(tableobj));
                        }
                    }
                }
            }
    
            /// <summary>
            /// 额外添加要修改的字段(如果转换来的对象中已经存在该字段则不添加)
            /// </summary>
            /// <param name="key"></param>
            /// <param name="value"></param>
            public void AddField(string key,object value)
            {
                foreach (string s in temp.Keys)
                {
                    if (s == key)
                    {
                    }
                    else
                    {
                        temp.Add(key, value);
                    }
                }
            }
    
            public bool Update<T>(Dictionary<string, object> tableobj, int rowId) where T : class
            {
                return db.Update<T, int>(tableobj, rowId);
            }
        }

    以下是以前写的(还是上边的写的更好):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Web;
    using Newtonsoft.Json;
    using SqlSugar;
    using EQD.variable;
    
    namespace EQD.variable
    {
        /// <summary>
        /// 这是一个数据表的基类,但要使用的前提是其他数据表要继承于它
        /// </summary>
        public class Table
        {
            private SqlSugarClient db = new SqlSugarClient(DBHelper.connectionString);
            //public SqlSugarClient DB { get; set; }
    
            /// <summary>
            /// 反序列化一下
            /// </summary>
            /// <param name="data"></param>
            /// <returns></returns>
            public static Table DeserializeObject(string data)
            {
                Table table = new Table();
                try
                {
                    table = JsonConvert.DeserializeObject<Table>(data);      //将要修改的内容全部转换成 dt
                }
                catch
                {
                }
                return table;
            }
    
            /// <summary>
            /// 这是修改之后的更新方法(tableobj:反序列化之后包含要修改的内容的对象。contactsid:要修改的数据记录的id)
            /// </summary>
            /// <param name="tableobj">反序列化之后包含要修改的内容的对象</param>
            /// <param name="contactsid">要修改的数据记录的id</param>
            /// <returns></returns>
            public bool Alter1(Table tableobj, int contactsid)
            {
                #region 将反序列化的对象中要修改的属性转换成字典集合
                List<string> namelist = new List<string>();
                List<Object> valuelist = new List<object>();
    
                Type t = tableobj.GetType();        //获取对象的类型
                foreach (PropertyInfo pi in t.GetProperties())      //遍历数据表对象的属性,分别将属性名和属性值存进两个集合里面
                {
                    if (pi.Name == "id")
                    { }
                    else
                    {
                        Object value = pi.GetValue(tableobj);
                        if (value != null)
                        {
                            namelist.Add(pi.Name);
                            valuelist.Add(value);
                        }
                    }
                }
    
                Dictionary<string, object> temp = new Dictionary<string, object>();
    
                for (int i = 0; i < namelist.Count; i++)
                {
                    temp.Add(namelist[i], valuelist[i]);
                }
                temp.Add("updateTime", DateTime.Now);
                #endregion
                bool result = db.Update<Table, int>(temp, contactsid);
    
                return result;
            }
    
    
            #region 以下是原来写的内容
            /// <summary>
            /// 修改数据表中某条数据的内容
            /// </summary>
            /// <param name="tableobj">数据表的对象——一条数据</param>
            /// <returns></returns>
            public static Object Alter(Table tableobj)
            {
                List<string> namelist = new List<string>();
                List<Object> valuelist = new List<object>();
    
                Type t = tableobj.GetType();        //获取对象的类型
                foreach (PropertyInfo pi in t.GetProperties())      //遍历数据表对象的属性,分别将属性名和属性值存进两个集合里面
                {
                    if (pi.Name == "id")
                    { }
                    else
                    {
                        Object value = pi.GetValue(tableobj);
                        if (value != null)
                        {
                            namelist.Add(pi.Name);
                            valuelist.Add(value);
                        }
                    }
                }
    
                Dictionary<string, object> temp = new Dictionary<string, object>();
    
                for (int i = 0; i < namelist.Count; i++)
                {
                    temp.Add(namelist[i], valuelist[i]);
                }
                temp.Add("updateTime", DateTime.Now);
                return temp;
            }
    
            //方法重载,只有第二个参数里包含的字段才能进行修改
            public static Object AlterDate(Object tabledataobj, List<string> modifiableField)
            {
                List<string> namelist = new List<string>();
                List<Object> valuelist = new List<object>();
    
                Type t = tabledataobj.GetType();
                foreach (PropertyInfo pi in t.GetProperties())
                {
                    if (pi.Name == "id")
                    { }
                    else
                    {
                        if (modifiableField.Contains(pi.Name))
                        {
                            Object value = pi.GetValue(tabledataobj);
                            if (value != null)
                            {
                                namelist.Add(pi.Name);
                                valuelist.Add(value);
                            }
                        }
                    }
                }
    
                Dictionary<string, object> temp = new Dictionary<string, object>();
    
                for (int i = 0; i < namelist.Count; i++)
                {
                    temp.Add(namelist[i], valuelist[i]);
                }
                temp.Add("updateTime", DateTime.Now);
                return temp;
            }
            #endregion
        }
    }

    调用:

                //要传入的参数
                string owner = context.Request.Form["owner"];           //修改人
                int contactsid = Convert.ToInt32(context.Request.Form["contactsid"]);       //要修改的联系人的id
                //要修改的信息
                string data = context.Request.Form["data"];         //这是一条json数据字符串,里面包含了要修改的信息的内容
    
                Table table = new t_user();
                table = Table.DeserializeObject(data);      //如果传入的数据不对,则返回的 table 对象的属性全部为 null
    
                using (var db = new SqlSugarClient(DBHelper.connectionString))
                {
                    try
                    {
                        var result = table.Alter1(table, contactsid);
                    }
                    catch (Exception e)
                    { }
                }

     对于原来的代码里其实还是有一些很好的东西,比如动态生成对象且动态增加属性。但对于这个类,因为 SqlSuger 其实有对应的只修改某些列的方法,所以以上的代码还可以再调整,进行优化。

    只数据部分字段:

       var result = db.Queryable<t_user>().Where(u => u.CompanyId == comid && u.Isdel == false).OrderBy(u => u.addTime, OrderByType.Desc).ToPageList(page + 1, 3);     //先全部查出来,然后再用 tuple
         List<Tuple<int, DateTime?>> list = new List<Tuple<int, DateTime?>>();
         foreach (t_user u in result)
         {
             list.Add(new Tuple<int, DateTime?>(u.id,u.addTime));
         }
  • 相关阅读:
    Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
    Spring Boot 2 (八):Spring Boot 集成 Memcached
    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践
    Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏
    Spring Boot 2 (四):使用 Docker 部署 Spring Boot
    微信开发中,不同手机系统遇到的bug(不定时更新)
    gulp-sourcemaps的用法
    实现输入框高度随内容变化
    微信开发,浏览器缓存问题
    mac中nvm的安装和使用
  • 原文地址:https://www.cnblogs.com/zhangchaoran/p/7521261.html
Copyright © 2020-2023  润新知