/// <summary> /// Returns the amount of objects of a given type that would be returned by a query /// </summary> /// <typeparam name="T">The type of the object</typeparam> /// <param name="query">The query</param> /// <returns>The amount of objects</returns> public int GetCount <T>(Query query) { ICriteria criteria = session.CreateCriteria(typeof(T)); criteria.SetProjection(Projections.RowCount()); QueryTranslator queryTranslator = new QueryTranslator(criteria, query); queryTranslator.Execute(); return((int)criteria.List()[0]); }
/// <summary> /// Executes a query using pagination facilities /// </summary> /// <typeparam name="T">The type of the objects returned</typeparam> /// <param name="query">The query</param> /// <param name="pageIndex">The index of the page to retrieve</param> /// <param name="pageSize">The size of the page to retrieve</param> /// <returns>A distinct list of instances</returns> public IList <T> GetByCriteria <T>(Query query, int pageIndex, int pageSize) where T : class, new() { ICriteria criteria = session.CreateCriteria(typeof(T)); QueryTranslator queryTranslator = new QueryTranslator(criteria, query); queryTranslator.Execute(); criteria.SetFirstResult(pageIndex * pageSize); if (pageSize > 0) { criteria.SetMaxResults(pageSize); } return(criteria.List <T>()); }
public void Execute() { Query myQuery = this._query; foreach (OrderClause clause in myQuery.OrderClauses) { _criteria.AddOrder(new Order(clause.PropertyName, clause.Criterion == OrderClause.OrderClauseCriteria.Ascending ? true : false)); } // TODO: Potrebno je proveriti sledece ogranicenje: Za istu asocijaciju // (tj AssociationPath) nije moguce kombinovati CreateAlias i eager fetch // mode (poziv SetFetchMode sa parametrom FetchMode.Eager) foreach (AssociationAlias a in myQuery.Aliases) { // NOTE: Primetiti da CreateAlias daje inner join _criteria.CreateAlias(a.AssociationPath, a.AliasName); } foreach (Criterion myCriterion in myQuery.Criteria) { ICriterion criterion = null; if (myCriterion.Operator == CriteriaOperator.Equal) criterion = Expression.Eq(myCriterion.PropertyName, myCriterion.Value); else if (myCriterion.Operator == CriteriaOperator.NotEqual) criterion = Expression.Not(Expression.Eq(myCriterion.PropertyName, myCriterion.Value)); else if (myCriterion.Operator == CriteriaOperator.GreaterThan) criterion = Expression.Gt(myCriterion.PropertyName, myCriterion.Value); else if (myCriterion.Operator == CriteriaOperator.GreaterThanOrEqual) criterion = Expression.Ge(myCriterion.PropertyName, myCriterion.Value); else if (myCriterion.Operator == CriteriaOperator.LesserThan) criterion = Expression.Lt(myCriterion.PropertyName, myCriterion.Value); else if (myCriterion.Operator == CriteriaOperator.LesserThanOrEqual) criterion = Expression.Le(myCriterion.PropertyName, myCriterion.Value); else if (myCriterion.Operator == CriteriaOperator.Like) { if (myCriterion.CaseInsensitive) criterion = Expression.InsensitiveLike( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode)); else criterion = Expression.Like( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode)); } else if (myCriterion.Operator == CriteriaOperator.NotLike) { if (myCriterion.CaseInsensitive) criterion = Expression.Not(Expression.InsensitiveLike( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode))); else criterion = Expression.Not(Expression.Like( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode))); } else if (myCriterion.Operator == CriteriaOperator.IsNull) criterion = Expression.IsNull(myCriterion.PropertyName); else if (myCriterion.Operator == CriteriaOperator.IsNotNull) criterion = Expression.IsNotNull(myCriterion.PropertyName); else throw new ArgumentException("operator", "CriteriaOperator not supported in NHibernate Provider"); if (_query.Operator == QueryOperator.And) _criteria.Add(Expression.Conjunction().Add(criterion)); else if (_query.Operator == QueryOperator.Or) _criteria.Add(Expression.Disjunction().Add(criterion)); } foreach (Query subQuery in myQuery.SubQueries) { QueryTranslator myTranslator = new QueryTranslator(_criteria, _query); myTranslator.Execute(); // Recursive Call } foreach (AssociationFetch f in myQuery.FetchModes) { FetchMode fetchMode = FetchMode.Default; if (f.FetchMode == AssociationFetchMode.Eager) fetchMode = FetchMode.Eager; else if (f.FetchMode == AssociationFetchMode.Lazy) fetchMode = FetchMode.Lazy; _criteria.SetFetchMode(f.AssociationPath, fetchMode); } }
public void Execute() { Query myQuery = this._query; foreach (OrderClause clause in myQuery.OrderClauses) { _criteria.AddOrder(new Order(clause.PropertyName, clause.Criterion == OrderClause.OrderClauseCriteria.Ascending ? true : false)); } // TODO: Potrebno je proveriti sledece ogranicenje: Za istu asocijaciju // (tj AssociationPath) nije moguce kombinovati CreateAlias i eager fetch // mode (poziv SetFetchMode sa parametrom FetchMode.Eager) foreach (AssociationAlias a in myQuery.Aliases) { // NOTE: Primetiti da CreateAlias daje inner join _criteria.CreateAlias(a.AssociationPath, a.AliasName); } foreach (Criterion myCriterion in myQuery.Criteria) { ICriterion criterion = null; if (myCriterion.Operator == CriteriaOperator.Equal) { criterion = Expression.Eq(myCriterion.PropertyName, myCriterion.Value); } else if (myCriterion.Operator == CriteriaOperator.NotEqual) { criterion = Expression.Not(Expression.Eq(myCriterion.PropertyName, myCriterion.Value)); } else if (myCriterion.Operator == CriteriaOperator.GreaterThan) { criterion = Expression.Gt(myCriterion.PropertyName, myCriterion.Value); } else if (myCriterion.Operator == CriteriaOperator.GreaterThanOrEqual) { criterion = Expression.Ge(myCriterion.PropertyName, myCriterion.Value); } else if (myCriterion.Operator == CriteriaOperator.LesserThan) { criterion = Expression.Lt(myCriterion.PropertyName, myCriterion.Value); } else if (myCriterion.Operator == CriteriaOperator.LesserThanOrEqual) { criterion = Expression.Le(myCriterion.PropertyName, myCriterion.Value); } else if (myCriterion.Operator == CriteriaOperator.Like) { if (myCriterion.CaseInsensitive) { criterion = Expression.InsensitiveLike( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode)); } else { criterion = Expression.Like( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode)); } } else if (myCriterion.Operator == CriteriaOperator.NotLike) { if (myCriterion.CaseInsensitive) { criterion = Expression.Not(Expression.InsensitiveLike( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode))); } else { criterion = Expression.Not(Expression.Like( myCriterion.PropertyName, myCriterion.Value.ToString(), convertMatchMode(myCriterion.MatchMode))); } } else if (myCriterion.Operator == CriteriaOperator.IsNull) { criterion = Expression.IsNull(myCriterion.PropertyName); } else if (myCriterion.Operator == CriteriaOperator.IsNotNull) { criterion = Expression.IsNotNull(myCriterion.PropertyName); } else { throw new ArgumentException("operator", "CriteriaOperator not supported in NHibernate Provider"); } if (_query.Operator == QueryOperator.And) { _criteria.Add(Expression.Conjunction().Add(criterion)); } else if (_query.Operator == QueryOperator.Or) { _criteria.Add(Expression.Disjunction().Add(criterion)); } } foreach (Query subQuery in myQuery.SubQueries) { QueryTranslator myTranslator = new QueryTranslator(_criteria, _query); myTranslator.Execute(); // Recursive Call } foreach (AssociationFetch f in myQuery.FetchModes) { FetchMode fetchMode = FetchMode.Default; if (f.FetchMode == AssociationFetchMode.Eager) { fetchMode = FetchMode.Eager; } else if (f.FetchMode == AssociationFetchMode.Lazy) { fetchMode = FetchMode.Lazy; } _criteria.SetFetchMode(f.AssociationPath, fetchMode); } }