示例#1
0
        public IList <CurrencyRate> GetCurrencyRateFilteredList(object state, Utils.ParameterString parameterString, bool ignoreDeletedRows = true)
        {
            ReadState(state);

            var crit = Query <CurrencyRate>(); //Создаем критерий

            var ps = new ParameterString(filter);

            filter = "";

            if (ps["Date"] != null)
            {
                var      dates = (ps["Date"].Value as string).Split('-');
                DateTime?date1 = null;
                if (dates[0].Length > 0)
                {
                    date1 = ValidationUtils.TryGetDate(dates[0]);
                    date1 = date1.Value.SetHoursMinutesAndSeconds(0, 0, 0);
                }
                DateTime?date2 = null;
                if (dates[1].Length > 0)
                {
                    date2 = ValidationUtils.TryGetDate(dates[1]);
                    date2 = date2.Value.SetHoursMinutesAndSeconds(23, 59, 59);
                }

                // Фильтруем записи
                if (date1 != null && date2 != null)
                {
                    crit.Where(x => (x.StartDate >= date1 && x.StartDate <= date2) || (x.EndDate >= date1 && x.EndDate <= date2));
                }
                else if (date1 != null && date2 == null)
                {
                    crit.Where(x => x.StartDate >= date1 || x.EndDate >= date1);
                }
                else if (date1 == null && date2 != null)
                {
                    crit.Where(x => x.StartDate <= date2 || (x.EndDate <= date2 && x.EndDate != null));
                }
            }

            parameterString.Delete("Date");
            this.parameterString = parameterString;
            CreateFilter(crit);

            int totalRowCount = crit.CountDistinct();

            WriteTotalRowCount(state, totalRowCount);                                    //Записываем общее кол-во строк

            SortByCriteria(crit, sort);                                                  //Сортируем выборку

            state.GetType().GetMethod("CheckAndCorrectCurrentPage").Invoke(state, null); //приводит текущую страницу к корректному значению
            currentPage = (int)state.GetType().GetProperty("CurrentPage").GetValue(state, null);

            crit.SetFirstResult((currentPage - 1) * pageSize).SetMaxResults(pageSize);

            this.parameterString = null;

            return(crit.ToList <CurrencyRate>());
        }