/// <summary> /// Allows to get a sub criteria by path. Will return null if the criteria does /// not exists. /// </summary> /// <param name="criteria">criteria instance</param> /// <param name="expression">Lambda expression returning association path</param> /// <returns>The "sub criteria"</returns> public static ICriteria GetCriteriaByPath(this ICriteria criteria, Expression <Func <object> > expression) { string path = ExpressionProcessor.FindMemberExpression(expression.Body); return(criteria.GetCriteriaByPath(path)); }
public IList <PriceImport> GetByStatus(ImportStatus status, string orderBy) { ICriteria crit = GetCriteria(); crit.Add(Expression.Eq("ImportStatus", status)); ICriteria critSort = crit; if (string.IsNullOrEmpty(orderBy)) { string[] sort = orderBy.Split('.'); string sortField = orderBy; if (!sortField.Contains("TimeStamp") && sort.Length > 1) { critSort = crit.GetCriteriaByPath(sort[0]); if (critSort == null) { critSort = crit.CreateCriteria(sort[0]); } sortField = sort[1]; } critSort.AddOrder(new Order(sortField, true)); } return(crit.List <PriceImport>()); }
public void TestGetCriteriaByPath() { Person fatherAlias = null; ICriteria criteria = CreateSession() .CreateCriteria(typeof(Person)) .CreateCriteria <Person>(p => p.Father, () => fatherAlias); Assert.AreEqual("fatherAlias", criteria.GetCriteriaByPath <Person>(p => p.Father).Alias); }
public DetachedCriteria GetCriteriaByPath(string path) { ICriteria tmpCrit = criteria.GetCriteriaByPath(path); if (tmpCrit == null) { return(null); } return(new DetachedCriteria(impl, tmpCrit)); }
public void TestGetCriteriaByPathUsingAlias() { Person personAlias = null; Person fatherAlias = null; ICriteria criteria = CreateSession() .CreateCriteria(typeof(Person), () => personAlias) .CreateCriteria(() => personAlias.Father, () => fatherAlias); Assert.AreEqual("fatherAlias", criteria.GetCriteriaByPath(() => personAlias.Father).Alias); }
public IList <CatalogPage> GetPagesByFilters(GridState gridState, IList <Filters.IFilter> filters) { ICriteria crit = GetCriteria(); MasterPriceSearchParameters mpsp = FilterHelper.GetSearchFilters(filters); if (!string.IsNullOrEmpty(mpsp.Description)) { Disjunction d = new Disjunction(); d.Add(Restrictions.InsensitiveLike("Description", mpsp.Description, MatchMode.Anywhere)); d.Add(Restrictions.InsensitiveLike("DescriptionAlternative", mpsp.Description, MatchMode.Anywhere)); d.Add(Restrictions.InsensitiveLike("Name", mpsp.Description, MatchMode.Anywhere)); d.Add(Restrictions.InsensitiveLike("NameAlternative", mpsp.Description, MatchMode.Anywhere)); crit.Add(d); } if (mpsp.CatalogPage != null) { crit.Add(Expression.Eq("Parent", mpsp.CatalogPage)); } if (mpsp.CategoryPageStatus != null) { crit.Add(Expression.Eq("CategoryPageStatus", mpsp.CategoryPageStatus)); } DetachedCriteria levelOneCriteria = DetachedCriteria.For <CatalogPage>().SetProjection(Projections.Property("ID")) .Add(Expression.IsNull("Parent")); ICriterion levelOneSubquery = Subqueries.PropertyIn("Parent", levelOneCriteria); crit.Add(levelOneSubquery); string[] sort = gridState.SortField.Split('.'); ICriteria critSort = crit; string sortField = gridState.SortField; if (!sortField.Contains("TimeStamp") && sort.Length > 1) { critSort = crit.GetCriteriaByPath(sort[0]); if (critSort == null) { critSort = crit.CreateCriteria(sort[0]); } sortField = sort[1]; } critSort.AddOrder(new Order(sortField, gridState.SortAscending)); if (!gridState.MarkedAll) { crit.Add(Expression.In("ID", gridState.Items)); } return(crit.List <CatalogPage>()); }
public IList <PriceImport> Search(string info, DateTime?fromDate, out int totalRecords, GridState gridState, DateTime?toDate, ImportStatus?status) { int pageNumber = gridState.PageNumber; int pageSize = gridState.PageSize; ICriteria crit = SearchCriteria(info, fromDate, toDate, status); crit.SetProjection(Projections.ProjectionList().Add(Projections.Count("Number"))); totalRecords = crit.UniqueResult <int>(); if (totalRecords == 0) { return(new List <PriceImport>()); } pageNumber = Utils.AdjustPageNumber(pageNumber, pageSize, totalRecords); crit = SearchCriteria(info, fromDate, toDate, status); crit.SetMaxResults(pageSize); if (pageNumber == 1) { crit.SetFirstResult(0); } else { crit.SetFirstResult((pageNumber - 1) * pageSize); } string[] sort = gridState.SortField.Split('.'); ICriteria critSort = crit; string sortField = gridState.SortField; if (!sortField.Contains("TimeStamp") && sort.Length > 1) { critSort = crit.GetCriteriaByPath(sort[0]); if (critSort == null) { critSort = crit.CreateCriteria(sort[0]); } sortField = sort[1]; } critSort.AddOrder(new Order(sortField, gridState.SortAscending)); return(crit.List <PriceImport>()); }
/// <summary> /// 处理查询属性中还有.的情况,在这种情况下,表示查询条件并非本对象的直接属性,而是 /// 相关对象的属性,如使用包装所属产品的属性查询对应的包装时,则查询属性为package.Product.OriginalId="A0040" /// </summary> /// <param name="criterion"></param> /// <param name="criteria"></param> private void TranslateCascadeToNHCriterion(Criterion criterion, ICriteria criteria) { int firstPositionOfDot = criterion.PropertyName.IndexOf("."); string subCriteriaPath = criterion.PropertyName.Substring(0, firstPositionOfDot); Criterion subCriterion = null; switch (criterion.CriteriaOperator) { case CriteriaOperator.InOfInt32: case CriteriaOperator.NotInOfInt32: case CriteriaOperator.InOfString: case CriteriaOperator.NotInOfString: if (criterion.Values != null && criterion.Values.Count > 0) { subCriterion = new Criterion(criterion.PropertyName.Substring(firstPositionOfDot + 1), criterion.Values, criterion.CriteriaOperator); } break; default: subCriterion = new Criterion(criterion.PropertyName.Substring(firstPositionOfDot + 1), criterion.Value, criterion.CriteriaOperator); break; } if (subCriterion == null) { return; } ICriteria subCriteria = criteria.GetCriteriaByPath(subCriteriaPath); if (subCriteria == null) { subCriteria = criteria.CreateCriteria(subCriteriaPath); } if (subCriterion.PropertyName.IndexOf(".") > 0) { TranslateCascadeToNHCriterion(subCriterion, subCriteria); } else { ICriterion subNHCriterion = TranslateToNHCriterion(subCriterion); subCriteria.Add(subNHCriterion); } }
protected void SetupSorting(ICriteria crit, string sortField, bool sortAscending) { if (string.IsNullOrEmpty(sortField)) { string[] sort = sortField.Split('.'); ICriteria critSort = crit; if (!sortField.Contains("TimeStamp") && sort.Length > 1) { critSort = crit.GetCriteriaByPath(sort[0]); if (critSort == null) { critSort = crit.CreateCriteria(sort[0]); } sortField = sort[1]; } critSort.AddOrder(new Order(sortField, sortAscending)); } }
/// <summary> /// Компиляция выражения в ICriterion NHibernate /// </summary> /// <returns></returns> global::NHibernate.Criterion.ICriterion IExpression.Compile(ref ICriteria iCriteria, string alias) { global::NHibernate.Criterion.ICriterion result = null; if (expressions.Count > 0) { string path; //Получаем поле if (createExpression != null) { path = ParseExpression(createExpression.Body); } else { path = propertyName; } string subAlias = ""; //Создаем Restriction на родительское поле и присваиваем ему псевдоним, по которому будем обращаться к дочерним полям ICriteria criteria; var critByPath = iCriteria.GetCriteriaByPath(path); //Пытаемся получить критерий для свойства if (critByPath == null) //Получен ли критерий? { //Нет subAlias = "alias_" + Guid.NewGuid().ToString().Replace("-", ""); //создаем псевдоним criteria = iCriteria.CreateCriteria(path, subAlias); //Создаем вложенный критерий } else { //Да subAlias = critByPath.Alias; //Получаем пседноним criteria = critByPath; //Сохраняем критерий } //Генерация условия result = expressions[0].Compile(ref criteria, subAlias); } return(result); }
ICriteria BindCriteriaByPath(ICriteria criteria, string path) { return(criteria.GetCriteriaByPath(path) ?? criteria.CreateCriteria(path)); }
private static ICriteria ExtendCriteria(ICriteria criteria, string segment) { return(criteria.GetCriteriaByPath(segment) ?? criteria.CreateCriteria(segment, JoinType.LeftOuterJoin)); }
internal static ICriteria BindCriteriaByPath(this ICriteria criteria, string path) { return(criteria.GetCriteriaByPath(path) ?? criteria.CreateCriteria(path)); }