public static Expression Find(Expression expression, Type type) { TypedSubtreeFinder finder = new TypedSubtreeFinder(type); finder.Visit(expression); return(finder.root); }
private Expression FindProviderInExpression(Expression expression) { Expression root = TypedSubtreeFinder.Find(expression, typeof(IQueryProvider)); if (root == null) { root = TypedSubtreeFinder.Find(expression, typeof(IQueryable)); } return(root); }
private Expression Find(Expression expression, IList <ParameterExpression> parameters, Type type) { if (parameters != null) { Expression found = parameters.FirstOrDefault(p => type.IsAssignableFrom(p.Type)); if (found != null) { return(found); } } return(TypedSubtreeFinder.Find(expression, type)); }
private Expression Find(Expression expression, IList <ParameterExpression> parameters, Type type) { Func <ParameterExpression, bool> predicate = null; if (parameters != null) { if (predicate == null) { predicate = p => type.IsAssignableFrom(p.Type); } Expression expression2 = parameters.FirstOrDefault <ParameterExpression>(predicate); if (expression2 != null) { return(expression2); } } return(TypedSubtreeFinder.Find(expression, type)); }
private IQueryProvider FindProvider(Expression expression) { ConstantExpression root = TypedSubtreeFinder.Find(expression, typeof(IQueryProvider)) as ConstantExpression; if (root == null) { root = TypedSubtreeFinder.Find(expression, typeof(IQueryable)) as ConstantExpression; } if (root != null) { IQueryProvider provider = root.Value as IQueryProvider; if (provider == null) { IQueryable query = root.Value as IQueryable; if (query != null) { provider = query.Provider; } } return(provider); } return(null); }
private Expression Find(Expression expression, IList <ParameterExpression> parameters) { return(TypedSubtreeFinder.Find(expression, this.GetType())); }
private static bool ContainsOrEquals(Expression expression, Expression searchFor) { return(expression == searchFor || TypedSubtreeFinder.Find(expression, searchFor.Type) == searchFor); }