У меня есть проект MVC, для которого я пытаюсь настроить хорошее решение для пейджинга.
У меня есть несколько таблиц в SQL Server, которые содержат несколько тысяч строк, которые я бы хотел просматривать. Если у меня нет какого-либо фильтра для подкачки, он прекрасно работает. Это метод, который я использую для этого:
public virtual PagedList<T> GetPagedData(int startIndex, int count) {
var rowCount = session.CreateCriteria(typeof(T)).SetProjection(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.CreateCriteria(typeof(T)).SetFirstResult(startIndex).SetMaxResults(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
Мне также нужна возможность передать запрос, чтобы еще больше сузить результаты и вернуть новую таблицу подкачки. То, что у меня пока есть:
public virtual PagedList<T> GetPagedData<T>(int startIndex, int count, System.Linq.Expressions.Expression<Func<T, bool>> predicate) where T : class {
var rowCount = session.QueryOver<T>().Where(predicate).Select(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.QueryOver<T>().Where(predicate).Skip(startIndex).Take(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
вызов этого будет выглядеть примерно так:
* * 1010
Проблема в том, что ему не нравится выражение "Содержит". Если я сделаю точное совпадение, оно будет отлично работать (x.Name == q), но я не получу результаты, к которым стремлюсь.
Исключение, которое я вижу при использовании "Contains":
Нераспознанный вызов метода: System.String: Boolean Contains (System.String)
У кого-нибудь есть идеи, как заставить это принимать такое выражение динамически? У меня есть базовый класс репозитория, в который я поместил это, потому что я буду использовать тот же тип поведения для нескольких других таблиц. Я мог бы написать отдельный метод для каждой таблицы, но я бы предпочел сделать это динамически, если это возможно.
Спасибо за любой совет!