Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        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>());
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        public DetachedCriteria GetCriteriaByPath(string path)
        {
            ICriteria tmpCrit = criteria.GetCriteriaByPath(path);

            if (tmpCrit == null)
            {
                return(null);
            }
            return(new DetachedCriteria(impl, tmpCrit));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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>());
        }
Esempio n. 7
0
        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));
            }
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
 ICriteria BindCriteriaByPath(ICriteria criteria, string path)
 {
     return(criteria.GetCriteriaByPath(path) ?? criteria.CreateCriteria(path));
 }
Esempio n. 12
0
 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));
 }