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>()); }