Example #1
0
        public static ICacheOptimizedQueryable <TResult> Select <TSource, TResult>(
            this ICacheOptimizedQueryable <TSource> source, Expression <Func <TSource, TResult> > selector)
        {
            var optimizationConfig  = source.OptimizationConfig;
            var optimizedExpression = OptimizeExpressionForCache(selector, optimizationConfig);

            return(source.AsQueryable().Select(optimizedExpression).AsCacheOptimizedQueryable());
        }
Example #2
0
        public static IQueryable <IGrouping <TKey, TSource> > GroupBy <TSource, TKey>(
            this ICacheOptimizedQueryable <TSource> source, Expression <Func <TSource, TKey> > keySelector)
        {
            var optimizationConfig   = source.OptimizationConfig;
            var keySelectorOptimised = OptimizeExpressionForCache(keySelector, optimizationConfig);

            return(source.AsQueryable().GroupBy(keySelectorOptimised).AsCacheOptimizedQueryable());
        }
Example #3
0
        private static TOut DecorateMethod <TSource, TExpression, TOut>(this ICacheOptimizedQueryable <TSource> source,
                                                                        TExpression expression, Func <IQueryable <TSource>, TExpression, TOut> method) where TExpression : Expression
        {
            var optimizationConfig  = source.OptimizationConfig;
            var optimizedExpression = OptimizeExpressionForCache(expression, optimizationConfig);
            var query = method(source.AsQueryable(), optimizedExpression);

            return(query);
        }
Example #4
0
        public static IQueryable <TResult> GroupBy <TSource, TKey, TResult>(this ICacheOptimizedQueryable <TSource> source,
                                                                            Expression <Func <TSource, TKey> > keySelector,
                                                                            Expression <Func <TKey, IEnumerable <TSource>, TResult> > resultSelector)
        {
            var optimizationConfig      = source.OptimizationConfig;
            var keySelectorOptimised    = OptimizeExpressionForCache(keySelector, optimizationConfig);
            var resultSelectorOptimised = OptimizeExpressionForCache(resultSelector, optimizationConfig);

            return(source.AsQueryable().GroupBy(keySelectorOptimised, resultSelectorOptimised)
                   .AsCacheOptimizedQueryable());
        }
Example #5
0
        public static ICacheOptimizedQueryable <TResult> SelectMany <TSource, TCollection, TResult>(
            this ICacheOptimizedQueryable <TSource> source,
            Expression <Func <TSource, IEnumerable <TCollection> > > collectionSelector,
            Expression <Func <TSource, TCollection, TResult> > resultSelector)
        {
            var optimizationConfig          = source.OptimizationConfig;
            var collectionSelectorOptimized = OptimizeExpressionForCache(collectionSelector, optimizationConfig);
            var resultSelectorOptimized     = OptimizeExpressionForCache(resultSelector, optimizationConfig);

            return(source.AsQueryable().SelectMany(collectionSelectorOptimized, resultSelectorOptimized)
                   .AsCacheOptimizedQueryable());
        }
Example #6
0
        //TODO: ADD WARNING FOR IQueryable And IEnumerable Outer
        public static IQueryable <TResult> Join <TOuter, TInner, TKey, TResult>(
            this ICacheOptimizedQueryable <TOuter> outer, ICacheOptimizedQueryable <TInner> inner,
            Expression <Func <TOuter, TKey> > outerKeySelector, Expression <Func <TInner, TKey> > innerKeySelector,
            Expression <Func <TOuter, TInner, TResult> > resultSelector)
        {
            var optimizationConfig      = outer.OptimizationConfig;
            var outerSelectorOptimized  = OptimizeExpressionForCache(outerKeySelector, optimizationConfig);
            var innerSelectorOptimized  = OptimizeExpressionForCache(innerKeySelector, optimizationConfig);
            var resultSelectorOptimized = OptimizeExpressionForCache(resultSelector, optimizationConfig);

            return(outer.AsQueryable().Join(inner.AsQueryable(), outerSelectorOptimized, innerSelectorOptimized,
                                            resultSelectorOptimized));
        }