tnblog
首页
视频
资源
登录
愿你出走半生,归来仍是少年
排名
3
文章
317
粉丝
22
评论
14
bootstrap 栅格布局一小例子
剑轩 : 后端写样式有点痛苦哇
一点flex布局的运用
剑轩 : 后端写样式有点痛苦哇
vue.js常用指令
剑轩 : 可以可以,多总结一点
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

反射实现查询

5002人阅读 2020/1/9 17:55 总访问:2062943 评论:0 收藏:0 手机
分类: NET


实现任意对象的查询

  1. public static List<T> ToList<T>()
  2. {
  3.     string tableName = typeof(T).Name;
  4.     string sql = "select * from " + tableName;
  5.     using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=mydb"))
  6.     {
  7.         conn.Open();
  8.         using (SqlCommand com = new SqlCommand(sql, conn))
  9.         {
  10.             SqlDataReader reader = com.ExecuteReader();
  11.             List<T> departments = new List<T>();
  12.             while (reader.Read())
  13.             {
  14.                 //一个类型通过反射实例化
  15.                 T obj = Activator.CreateInstance<T>();
  16.                 //遍历类型所有的公开属性
  17.                 foreach (var item in obj.GetType().GetProperties())
  18.                 {
  19.                     string pname = item.Name;
  20.                     //取出来对应属性名查询的value
  21.                     Object value = reader[pname];
  22.                     if (value != DBNull.Value)
  23.                     {
  24.                         //反射赋值
  25.                         item.SetValue(obj, value);
  26.                     }
  27.                 }
  28.                 departments.Add(obj);
  29.             }
  30.             return departments;
  31.         }
  32.     }
  33. }

表达式数实现一个简单得条件

表达式数的简单分析

代码:

  1. public static List<T> ToList<T>(Expression<Func<T, bool>> predicate)
  2.     {
  3.         string tableName = typeof(T).Name;
  4.         string sql = "select * from " + tableName + " where ";
  5.         BinaryExpression binaryExpression = predicate.Body as BinaryExpression;
  6.         //解析左边(提起名字)
  7.         MemberExpression memberExpression = binaryExpression.Left as MemberExpression;
  8.         string name = memberExpression.Member.Name;
  9.         sql += " " + name;
  10.         if (binaryExpression.NodeType == ExpressionType.Equal)
  11.         {
  12.             sql += " = ";
  13.         }
  14.         //解析右边(属性值)
  15.         string rightvalue = binaryExpression.Right.ToString().Replace("\"""");
  16.         sql += "'" + rightvalue + "'";
  17.         using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=mydb"))
  18.         {
  19.             conn.Open();
  20.             using (SqlCommand com = new SqlCommand(sql, conn))
  21.             {
  22.                 SqlDataReader reader = com.ExecuteReader();
  23.                 List<T> departments = new List<T>();
  24.                 while (reader.Read())
  25.                 {
  26.                     //一个类型通过反射实例化
  27.                     T obj = Activator.CreateInstance<T>();
  28.                     //遍历类型所有的公开属性
  29.                     foreach (var item in obj.GetType().GetProperties())
  30.                     {
  31.                         string pname = item.Name;
  32.                         //取出来对应属性名查询的value
  33.                         Object value = reader[pname];
  34.                         if (value != DBNull.Value)
  35.                         {
  36.                             //反射赋值
  37.                             item.SetValue(obj, value);
  38.                         }
  39.                     }
  40.                     departments.Add(obj);
  41.                 }
  42.                 return departments;
  43.             }
  44.         }
  45.     }

使用:

  1. List<Department> departments = MyEFContext.ToList<Department>(a => a.DepartmentName == "洗澡服务");



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价