Example #1
0
        /// <summary>An IQueryable&lt;T&gt; extension method that includes.</summary>
        /// <typeparam name="T">Generic type parameter.</typeparam>
        /// <typeparam name="T2">Generic type parameter.</typeparam>
        /// <param name="source">The source to act on.</param>
        /// <param name="selector">The selector.</param>
        /// <param name="predicate">The predicate.</param>
        /// <returns>An IQueryable&lt;T&gt;</returns>
        public static IQueryable <T> Include <T, T2>(this IQueryable <T> source, Expression <Func <T, IEnumerable <T2> > > selector, Func <T2, bool> predicate) where T : class where T2 : class
        {
            source = source.Include(selector);

            var         includeOrderedQueryable = source as QueryIncludeQueryable <T>;
            ObjectQuery objectQuery;

            if (includeOrderedQueryable == null)
            {
                objectQuery = source.GetObjectQuery();

                includeOrderedQueryable = new QueryIncludeQueryable <T>(source);
            }
            else
            {
                objectQuery = includeOrderedQueryable.ObjectQuery;
            }

            // Include
            includeOrderedQueryable.OriginalQueryable = includeOrderedQueryable.OriginalQueryable.Include(selector);

            // Include Filter
            var includeFilter = new QueryIncludeFilter <T, T2>()
            {
                selector = selector.Compile(), predicate = enumerable => enumerable.Where(predicate).ToList()
            };

            includeOrderedQueryable.IncludeFilters.Add(includeFilter);


            return(includeOrderedQueryable);
        }
Example #2
0
        public static IQueryable <T> Include <T, T2>(this IQueryable <T> source, Expression <Func <T, IEnumerable <T2> > > selector, Func <IQueryable <T2>, IQueryable <T2> > includeQuery) where T : class where T2 : class
        {
            var context        = source.GetObjectQuery().Context;
            var objectSetQuery = includeQuery(context.CreateObjectSet <T2>());

            var includeQueryable = new QueryIncludeQueryable <T, T2>(source, selector, objectSetQuery);

            return(includeQueryable);
        }
Example #3
0
        public IQueryable <TElement> CreateQuery <TElement>(Expression expression)
        {
            if (typeof(TElement) == typeof(T))
            {
                var query = (IQueryable <T>)OriginalProvider.CreateQuery <TElement>(expression);

                if (query is IOrderedQueryable <TElement> )
                {
                    var includeQuery = new QueryIncludeOrderedQueryable <T, T2>(query, IncludeQuery.Selector, IncludeQuery.IncludeQuery);
                    return((IOrderedQueryable <TElement>)includeQuery);
                }
                else
                {
                    var includeQuery = new QueryIncludeQueryable <T, T2>(query, IncludeQuery.Selector, IncludeQuery.IncludeQuery);
                    return((IQueryable <TElement>)includeQuery);
                }
            }
            throw new Exception("not supported yet");
        }
Example #4
0
 public QueryIncludeProvider(IQueryProvider provider, QueryIncludeQueryable <T, T2> includeQuery)
 {
     OriginalProvider = provider;
     IncludeQuery     = includeQuery;
 }