/// <summary> /// Creates a regular <see cref="FlowQuerySelection{TDestination}" /> instance. /// </summary> /// <param name="query"> /// The query. /// </param> /// <typeparam name="TSource"> /// The <see cref="System.Type" /> of the source entity. /// </typeparam> /// <typeparam name="TDestination"> /// The <see cref="System.Type" /> of the result. /// </typeparam> /// <returns> /// The created <see cref="FlowQuerySelection{TDestination}" /> instance. /// </returns> public static FlowQuerySelection <TDestination> SelectList <TSource, TDestination>(IQueryableFlowQuery query) where TSource : class { ICriteriaBuilder criteriaBuilder = GetCriteriaBuilder(query); ICriteria criteria = criteriaBuilder.Build <TSource, TDestination>(query); if (query.Constructor != null) { IEnumerable enumerable = query.IsDelayed ? criteria.Future <object>() : (IEnumerable)criteria.List(); return(new FlowQuerySelection <TDestination> ( () => ConstructionHelper.GetListByExpression <TDestination>(query.Constructor, enumerable) )); } IEnumerable <TDestination> selection = query.IsDelayed ? criteria.Future <TDestination>() : criteria.List <TDestination>(); // ReSharper disable once PossibleMultipleEnumeration return(new FlowQuerySelection <TDestination>(() => selection)); }
public QueryResult Result <T>(string queryString) { var hasInline = HasInlineCount(queryString); ICriteria query = Criteria <T>(queryString); ICriteria countQuery = (ICriteria)query.Clone(); var list = query.Future <T>(); QueryResult result; if (hasInline) { countQuery.ClearOrders(); var count = countQuery .SetFirstResult(0) .SetMaxResults(Int32.MaxValue) .SetProjection(Projections.RowCount()).FutureValue <Int32>(); result = new QueryResult() { InlineCount = count.Value, Results = list }; } else { result = new QueryResult() { Results = list }; } return(result); }
/// <summary> /// Versuch über ein Detached Criteria die Where-Klauseln zu verarbeiten, damit es mit dem Order nicht zu /// komplikationen kommt. /// </summary> protected virtual IPage <T> Find(IPageable pageable, Action <DetachedCriteria> criteriaBuilder, Action <ICriteria> ordersBuilder = null) { Require.NotNull(pageable, "pageable"); Require.NotNull(criteriaBuilder, "criteriaBuilder"); HibernateDelegate <IPage <T> > finder = delegate(ISession session) { DetachedCriteria whereCriteria = DetachedCriteria.For(typeof(T)); criteriaBuilder(whereCriteria); whereCriteria.SetProjection(Projections.Property("Id")); ICriteria elementsCriteria = session.CreateCriteria(typeof(T)); elementsCriteria.Add(Subqueries.PropertyIn("Id", whereCriteria)); if (ordersBuilder != null) { ordersBuilder(elementsCriteria); } ApplyPaging(pageable, elementsCriteria); ICriteria countCriteria = session.CreateCriteria(typeof(T)); countCriteria.Add(Subqueries.PropertyIn("Id", whereCriteria)); countCriteria.SetProjection(Projections.RowCountInt64()); IFutureValue <long> futureTotalCount = countCriteria.FutureValue <long>(); IEnumerable <T> futureElements = elementsCriteria.Future <T>(); Page <T> page = new Page <T>(futureElements.ToList(), pageable, futureTotalCount.Value); return(page); }; return(HibernateTemplate.Execute(finder)); }
public static DataPage <T> DataPage <T>(this ICriteria criteria, Pager pager) where T : class { if (pager.UsePages) { criteria.SetPage(pager.Start, pager.MaxResults); } else { criteria .SetFirstResult(pager.Start) .SetMaxResults(pager.MaxResults); } pager.Sorts.Each(x => criteria.AddOrder(x)); var count = criteria .RowCount() .FutureValue <int>(); var list = criteria.Future <T>(); return(new DataPage <T> { TotalCount = count.Value, Data = list.ToArray() }); }
private void CreateCriteriaOrFutures() { _mainCriteria = _session.CreateCriteria <T>().Add(Restrictions.In(_session.SessionFactory.GetClassMetadata(typeof(T)).IdentifierPropertyName, _ids)).SetTimeout(_timeoutInSeconds); if (_childNodesInfo != null) { bool rootHasList = false; //only one list can be joined with the main query var childCriterias = new List <ICriteria>(); PopulateChildrenCriteria(_childNodesInfo, CriteriaTransformer.Clone(_mainCriteria), _mainCriteria, ref rootHasList, childCriterias); if (childCriterias.Count > 0 || _deferred) { _mainFuture = _mainCriteria.Future <T>(); _childFutures = childCriterias.Select(c => c.Future <T>()).ToList(); } } else if (_deferred) { _mainFuture = _mainCriteria.Future <T>(); } }
public IEnumerable <NewsData> SearchByUser(object userId) { ArgumentValidator.IsNotNull("userId", userId); IEnumerable <NewsData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <NewsData>(); query.AddExpressionEq <NewsData, object>(o => o.IssuedById, userId); result = query.Future <NewsData>(); }); return(result); }
public IEnumerable <ContactData> SearchByEmployee(object employeeId) { ArgumentValidator.IsNotNull("EmployeeId", employeeId); IEnumerable <ContactData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <ContactData>(); query.AddExpressionEq <ContactData, object>(o => o.EmployeeId, employeeId); result = query.Future <ContactData>(); }); return(result); }
public IEnumerable <OpportunityData> SearchByCustomer(object customerId) { ArgumentValidator.IsNotNull("customerId", customerId); IEnumerable <OpportunityData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <OpportunityData>(); query.AddExpressionEq <OpportunityData, object>(o => o.CustomerId, customerId); result = query.Future <OpportunityData>(); }); return(result); }
public IEnumerable <DataPhraseData> SearchByLanguage(object languageId) { ArgumentValidator.IsNotNull("languageId", languageId); IEnumerable <DataPhraseData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <DataPhraseData>(); query.AddExpressionEq <DataPhraseData, object>(o => o.LanguageId, languageId); result = query.Future <DataPhraseData>(); }); return(result); }
public IEnumerable <ProductData> SearchBySupplier(object supplierId) { ArgumentValidator.IsNotNull("SupplierId", supplierId); IEnumerable <ProductData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <ProductData>(); query.AddExpressionEq <ProductData, object>(o => o.SupplierId, supplierId); result = query.Future <ProductData>(); }); return(result); }
public IEnumerable <CategoryData> RetrieveCategoryTree(object catalogId) { ArgumentValidator.IsNotNull("catalogId", catalogId); IEnumerable <CategoryData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <CategoryData>(); query.AddExpressionEq <CategoryData, object>(o => o.CatalogId, catalogId); result = query.Future <CategoryData>(); }); return(result); }
public IEnumerable <ReviewData> SearchByReference(object id) { ArgumentValidator.IsNotNull("id", id); IEnumerable <ReviewData> result = null; RepositoryExceptionWrapper.Wrap(GetType(), () => { ICriteria query = CurrentSession.CreateCriteria <ReviewData>(); query.AddExpressionEq <ReviewData, object>(o => o.ReferenceId, id); result = query.Future <ReviewData>(); }); return(result); }
/// <summary> /// Liefert eine Liste mit Entities entsprechend der Pageinformationen /// aus der Menge aller Entitäten. /// </summary> /// <param name="pageable">Beschreibung welche Menge der Entitäten zurückgeliefert werden.</param> /// <returns>Liste mit Entitäten.</returns> public virtual IPage <T> GetAll(IPageable pageable) { Require.NotNull(pageable, "pageable"); HibernateDelegate <IPage <T> > finder = delegate(ISession session) { ICriteria elementsCriteria = session.CreateCriteria(typeof(T)); elementsCriteria.AddOrder(Order.Asc("Id")); ApplyPaging(pageable, elementsCriteria); ICriteria countCriteria = session.CreateCriteria(typeof(T)); countCriteria.SetProjection(Projections.RowCountInt64()); IFutureValue <long> futureTotalCount = countCriteria.FutureValue <long>(); IEnumerable <T> futureElements = elementsCriteria.Future <T>(); Page <T> page = new Page <T>(futureElements.ToList(), pageable, futureTotalCount.Value); return(page); }; return(HibernateTemplate.Execute(finder)); }