C# 反射 表达式树 模糊搜索

作者:%e7%83%ad%e5%9c%97%e5%97%a3 和asp.net相关  

反射实体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;
        }

相关资料:

C# 反射 表达式树 模糊搜索来源网络,如有侵权请告知,即处理!

编程Tags: