Пример #1
0
            public static Expression Find(Expression expression, Type type)
            {
                TypedSubtreeFinder finder = new TypedSubtreeFinder(type);

                finder.Visit(expression);
                return(finder.root);
            }
Пример #2
0
            private Expression FindProviderInExpression(Expression expression)
            {
                Expression root = TypedSubtreeFinder.Find(expression, typeof(IQueryProvider));

                if (root == null)
                {
                    root = TypedSubtreeFinder.Find(expression, typeof(IQueryable));
                }
                return(root);
            }
Пример #3
0
 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));
 }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
0
 private Expression Find(Expression expression, IList <ParameterExpression> parameters)
 {
     return(TypedSubtreeFinder.Find(expression, this.GetType()));
 }
Пример #7
0
 private static bool ContainsOrEquals(Expression expression, Expression searchFor)
 {
     return(expression == searchFor || TypedSubtreeFinder.Find(expression, searchFor.Type) == searchFor);
 }