Ejemplo n.º 1
0
        private static IOrderedQueryable <T> Sort <T>(this IQueryable <T> queryable, LambdaExpression lambdaExpression, MethodInfo methodInfo)
        {
            var exp        = lambdaExpression.CheckNotNull(nameof(lambdaExpression)).Body;
            var resultType = exp.Type;
            var funcType   = typeof(Func <,>).MakeGenericType(typeof(T), resultType);
            var lambdaExpressionMethodInfo = MethodInfos.Expression.Lambda.MakeGenericMethod(funcType);

            var funcExpression = lambdaExpressionMethodInfo.Invoke(null, new object[] { exp, lambdaExpression.Parameters.ToArray() });

            var method = methodInfo.MakeGenericMethod(typeof(T), resultType);
            var result = method.Invoke(null, new object[] { queryable, funcExpression });

            return((IOrderedQueryable <T>)result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 提取成员信息
        /// </summary>
        /// <param name="expression">表达式</param>
        public static MemberInfo ExtractMemberInfo(this LambdaExpression expression)
        {
            expression.CheckNotNull(nameof(expression));

            MemberInfo info;

            try
            {
                var lambda  = expression;
                var operand = lambda.Body is UnaryExpression body
                    ? body.Operand as MemberExpression
                    : lambda.Body as MemberExpression;

                var member = operand.Member;
                info = member;
            }
            catch (Exception e)
            {
                throw new ArgumentNullException("属性或字段访问器表达式不是 “ o => o.Property” 格式", e);
            }

            return(info);
        }
Ejemplo n.º 3
0
 public static TPath BuildTPath(this LambdaExpression expr)
 {
     expr.CheckNotNull(nameof(expr));
     return(TPath.Builder.Build(expr));
 }