表达式树验证指定对象的属性是否为空

  public static class ExpressionTree
    {
        public static bool PropertiesNotNull<T>(T obj)
        {
            if (obj == null) { return false; }
            var type = obj.GetType();
            var paraExpression = Expression.Parameter(typeof(T), "object");
            object v; bool result = true;
            foreach (var prop in type.GetProperties())
            {
                v = VisitProperty<T>(obj, prop, paraExpression, paraExpression);
                if (v == null) { result = false; break; }
            }
            return result;
        }

        private static object VisitProperty<T>(object obj, PropertyInfo prop, Expression instanceExpression, ParameterExpression parameterExpression)
        {
            MemberExpression memExpression = Expression.Property(instanceExpression, prop);
            Expression objectExpression = Expression.Convert(memExpression, typeof(object));
            Expression<Func<T, object>> lambdaExpression = Expression.Lambda<Func<T, object>>(objectExpression, parameterExpression);
            Func<T, object> func = lambdaExpression.Compile();
            // object v = func((T)obj);
            return func((T)obj);
        }
    }

//调用
Student stu=new Student();
 if (!ExpressionTree.PropertiesNotNull(stu)) { return "请完善信息后提交!"); }

 

posted @ 2019-03-12 12:04  Chanwah  阅读(274)  评论(0)    收藏  举报