internal static System.Linq.Expressions.Expression TransformPredicateExpression(this IQueryVisitor visitor, System.Linq.Expressions.Expression expression) { System.Linq.Expressions.Expression result = expression; if (expression is System.Linq.Expressions.MethodCallExpression) { System.Linq.Expressions.MethodCallExpression methodCallExpression = (System.Linq.Expressions.MethodCallExpression)expression; if ((methodCallExpression.Method == typeof(EntityExtensions).GetMethod("Predicate")) && (methodCallExpression.Arguments.Count > 1) && (methodCallExpression.Arguments[1] != null) && (methodCallExpression.Arguments[1] is System.Linq.Expressions.ConstantExpression)) { object item; if (!TransformedExpressionsCache.TryGetValue(expression, out item)) { object objectValue = ((System.Linq.Expressions.ConstantExpression)methodCallExpression.Arguments[1]).Value; Uri predicate = (Uri)objectValue; Type type; string name; visitor.GetMappingDetails(predicate, methodCallExpression.Arguments[0].Type, out type, out name); System.Linq.Expressions.MemberExpression memberExpression = System.Linq.Expressions.Expression.MakeMemberAccess(methodCallExpression.Arguments[0], type.GetProperty(name)); TransformedExpressionsCache[expression] = result = memberExpression; } else { result = (System.Linq.Expressions.MemberExpression)item; } } } return(result); }