NHibernate — пейджинг с ICriteria и дополнительные вызовы ICriteriaC#

Место общения программистов C#
Anonymous
NHibernate — пейджинг с ICriteria и дополнительные вызовы ICriteria

Сообщение Anonymous »

Я хочу сделать что-то подобное...

Код: Выделить всё

return GetSession()
.ToPagedList(page, pageSize,
x=> x.SetFetchMode(DomainModelHelper.GetAssociationEntityNameAsPlural(), FetchMode.Eager));
Но я не знаю, как передать этот Func в ISession или ICriteria.< /p>

У меня есть стандартный метод расширения подкачки, и этот метод расширения должен иметь перегрузку, в которую я могу передавать дополнительные методы ICriteria, чтобы дополнительно настроить FetchMode или что-то еще.

Метод расширения:

Код: Выделить всё

public static class CriteriaExtensions
{
public static PagedList ToPagedList(this ISession session, int page, int pageSize) where T : Entity
{

var totalCount = TotalCount(session);

return new PagedList(session.CreateCriteria()
.SetFirstResult(pageSize * (page - 1))
.SetMaxResults(pageSize * page)
.Future().ToList(), page, pageSize, totalCount);

}

public static PagedList ToPagedList(this ISession session, int page, int pageSize, Func action) where T : Entity
{
var totalCount = TotalCount(session);

...
}

private static int TotalCount(ISession session) where T : Entity
{
return session.CreateCriteria()
.SetProjection(Projections.RowCount())
.FutureValue().Value;
}
}
edit:

Без перегрузки это выглядело бы так:

edit:

Без перегрузки это выглядело бы так:

edit:

Без перегрузки это выглядело бы так:

edit:

Без перегрузки это выглядело бы так:

edit:

Без перегрузки это выглядело бы так: р>

Код: Выделить всё

return GetSession()
.CreateCriteria()
.SetFetchMode(DomainModelHelper.GetAssociationEntityNameAsPlural(), FetchMode.Eager)
.ToPagedList(page, pageSize);
Метод расширения:

Код: Выделить всё

public static class CriteriaExtensions
{
public static PagedList ToPagedList(this ICriteria criteria, int page, int pageSize) where T : Entity
{
var copiedCriteria = (ICriteria) criteria.Clone();

var totalCount = TotalCount(criteria);

return new PagedList(copiedCriteria
.SetFirstResult(pageSize * (page - 1))
.SetMaxResults(pageSize * page)
.Future().ToList(), page, pageSize, totalCount);
}

private static int TotalCount(ICriteria criteria)
{
return criteria
.SetProjection(Projections.RowCount())
.FutureValue().Value;
}
}
Строка var copyCriteria = (ICriteria) критерии.Clone(); здесь пахнет, но я не знаю, как это изменить.

Какой подход вы бы предложили?

Подробнее здесь: https://stackoverflow.com/questions/356 ... eria-calls

Вернуться в «C#»