예제 #1
0
        private static void VisitSubExpression(MemberExpression expression,
                                               ParameterExpression currentParameter, List <string> orderByProperties, string currentMemberPath)
        {
            Type memberType;

            switch (expression.Member.MemberType)
            {
            case MemberTypes.Field:
                memberType = ((FieldInfo)expression.Member).FieldType;
                break;

            case MemberTypes.Property:
                memberType = ((PropertyInfo)expression.Member).PropertyType;
                break;

            default:
                throw new NotImplementedException();
            }

            if (string.IsNullOrEmpty(currentMemberPath) && !memberType.IsPrimitive && memberType != typeof(string) &&
                memberType != typeof(decimal))
            {
                throw new NotImplementedException();
            }

            string newMemberPath = ExpressionUtilities.GetJsonPropertyName(expression.Member);

            if (!string.IsNullOrEmpty(currentMemberPath))
            {
                newMemberPath = newMemberPath + "." + currentMemberPath;
            }

            switch (expression.Expression.NodeType)
            {
            case ExpressionType.Parameter:
                VisitSubExpression((ParameterExpression)expression.Expression, currentParameter,
                                   orderByProperties, newMemberPath);
                break;

            case ExpressionType.MemberAccess:
                VisitSubExpression((MemberExpression)expression.Expression, currentParameter,
                                   orderByProperties, newMemberPath);
                break;

            default:
                throw new NotImplementedException();
            }
        }
        private static string VisitSubExpression(MemberExpression expression, ParameterExpression sourceParameter,
                                                 IDictionary <string, object> queryParameters)
        {
            switch (expression.Expression.NodeType)
            {
            case ExpressionType.Parameter:
                return(VisitSubExpression((ParameterExpression)expression.Expression, sourceParameter)
                       + "." + ExpressionUtilities.GetJsonPropertyName(expression.Member));

            case ExpressionType.MemberAccess:
                return(VisitSubExpression((MemberExpression)expression.Expression, sourceParameter,
                                          queryParameters) + "." + ExpressionUtilities.GetJsonPropertyName(expression.Member));

            default:
                throw new NotImplementedException();
            }
        }
예제 #3
0
        private static string VisitSubExpression(MemberExpression expression,
                                                 ParameterExpression aggregateParameter, ParameterExpression currentParameter)
        {
            switch (expression.Expression.NodeType)
            {
            case ExpressionType.Parameter:
                return(VisitSubExpression((ParameterExpression)expression.Expression, aggregateParameter,
                                          currentParameter) + "." + ExpressionUtilities.GetJsonPropertyName(expression.Member));

            case ExpressionType.MemberAccess:
                return(VisitSubExpression((MemberExpression)expression.Expression, aggregateParameter,
                                          currentParameter) + "." + ExpressionUtilities.GetJsonPropertyName(expression.Member));

            case ExpressionType.Constant:
                return(VisitSubExpression((ConstantExpression)expression.Expression));

            default:
                throw new NotImplementedException();
            }
        }