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

表达式树简单条件解析

6078人阅读 2020/1/9 17:59 总访问:2062785 评论:0 收藏:0 手机
分类: mvc

只有一个条件代码很简单:

  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群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价