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(); } }
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(); } }