zoukankan      html  css  js  c++  java
  • C# 反射 表达式树 模糊搜索

    反射实体T,非datetime字段反射获取表达式树

      public static Expression<Func<T, bool>> GetSearchExpression<T>(string SearchString)
            {
                Expression<Func<T, bool>> filter = null;
                if (string.IsNullOrEmpty(SearchString)) return null;

                var left = Expression.Parameter(typeof(T), "m");
                Expression expression = Expression.Constant(false);

                T obj = default(T);
                var type = typeof(T);
                obj = (T)Activator.CreateInstance(type);
                var propertyInfos = type.GetProperties();
                foreach (var propertyInfo in propertyInfos)
                {
                    if (propertyInfo.Name.ToLower() == "id" || propertyInfo.PropertyType == typeof(DateTime)) continue;

                    Expression tostring = Expression.Call
             (
                 Expression.Property(left, typeof(T).GetProperty(propertyInfo.Name).Name),
               typeof(object).GetMethod("ToString"new Type[] { })
             );

                    Expression right = Expression.Call
                          (
                              tostring,
                            typeof(string).GetMethod("Contains"new Type[] { typeof(string) }),
                            Expression.Constant(SearchString)
                          );

                    expression = Expression.Or(right, expression);
                }
                filter = Expression.Lambda<Func<T, bool>>(expression, new[] { left });
                return filter;
            }
  • 相关阅读:
    「分块」学习笔记
    「NOIP 2017」逛公园
    大假期集训模拟赛15
    大假期集训模拟赛14
    大假期集训模拟赛13
    nginx 日志升级
    nginx 日志切割
    nginx 健康检查
    sftp 管理
    Prometheus 学习
  • 原文地址:https://www.cnblogs.com/hotss/p/3564972.html
Copyright © 2011-2022 走看看