예제 #1
0
 public IncPaginatedResult <TEntity> Paginated <TEntity>(PaginatedSpecification paginatedSpecification, OrderSpecification <TEntity> orderSpecification = null, Specification <TEntity> whereSpecification = null, FetchSpecification <TEntity> fetchSpecification = null) where TEntity : class, IEntity, new()
 {
     return(GetRavenQueryable <TEntity>()
            .Paginated(orderSpecification, whereSpecification, fetchSpecification, paginatedSpecification));
 }
예제 #2
0
 public IQueryable <TEntity> Query <TEntity>(OrderSpecification <TEntity> orderSpecification = null, Specification <TEntity> whereSpecification = null, FetchSpecification <TEntity> fetchSpecification = null, PaginatedSpecification paginatedSpecification = null) where TEntity : class, IEntity, new()
 {
     return(GetRavenQueryable <TEntity>()
            .Query(orderSpecification, whereSpecification, fetchSpecification, paginatedSpecification));
 }
예제 #3
0
        public static IncPaginatedResult <TEntity> Paginated <TEntity>(this IQueryable <TEntity> source, OrderSpecification <TEntity> orderSpecification, Specification <TEntity> whereSpecification, FetchSpecification <TEntity> fetchSpecification, PaginatedSpecification paginatedSpecification) where TEntity : class, IEntity
        {
            int totalCount     = source.Query(null, whereSpecification, null, null).Count();
            var paginatedItems = source.Query(orderSpecification, whereSpecification, fetchSpecification, paginatedSpecification).ToList();

            return(new IncPaginatedResult <TEntity>(paginatedItems, totalCount));
        }
예제 #4
0
        public static IQueryable <TEntity> Query <TEntity>(this IQueryable <TEntity> source, OrderSpecification <TEntity> orderSpecification, Specification <TEntity> whereSpecification, FetchSpecification <TEntity> fetchSpecification, PaginatedSpecification paginatedSpecification) where TEntity : class, IEntity
        {
            if (whereSpecification.With(r => r.IsSatisfiedBy()) != null)
            {
                source = source.Where(whereSpecification.IsSatisfiedBy());
            }

            if (orderSpecification != null)
            {
                var order = new AdHocOrderSpecification <TEntity>();
                orderSpecification.SortedBy()(order);
                source = order.applies.Aggregate(source, (current, apply) => apply(current));
            }

            if (paginatedSpecification != null)
            {
                source = source.Page(paginatedSpecification.CurrentPage, paginatedSpecification.PageSize);
            }

            if (fetchSpecification != null)
            {
                AdHocFetchSpecificationBase <TEntity> fetch = null;
                string fullName = source.Provider.GetType().FullName;
                if (fullName.EqualsWithInvariant("NHibernate.Linq.DefaultQueryProvider"))
                {
                    fetch = new AdHocFetchNhibernateSpecification <TEntity>();
                }
                else if (fullName.EqualsWithInvariant("System.Data.Entity.Internal.Linq.DbQueryProvider"))
                {
                    fetch = new AdHocFetchEFSpecification <TEntity>();
                }
                else if (fullName.Contains("Raven.Client.Linq.RavenQueryProvider"))
                {
                    fetch = new AdHocFetchRavenDbSpecification <TEntity>();
                }

                if (fetch != null)
                {
                    fetchSpecification.FetchedBy()(fetch);
                    source = fetch.applies.Aggregate(source, (current, apply) => apply(current));
                }
            }

            return(source);
        }
예제 #5
0
 public AndFetchSpecification(FetchSpecification <TEntity> first, FetchSpecification <TEntity> second)
 {
     this.first  = first;
     this.second = second;
 }