Я пытаюсь использовать подкачку в сочетании с проекцией суммы, чтобы получить сумму значений в столбце только для той страницы результатов, которая мне интересна. Я использую .NET, C # и NHibernate 3.1
У меня есть ICriteria для начала, который связан со всеми строками из связанной таблицы БД.
Затем я делаю следующее, чтобы получить версию с первой страницей (скажем, 10 элементов).из 40):
ICriteria recordsCriteria = CriteriaTransformer.Clone(criteria);
recordsCriteria.SetFirstResult(0);
recordsCriteria.SetMaxResults(10);
Я использую эту Критерию для чего-то другого, поэтому создаю еще два клона:
ICriteria totalAggCriteria = CriteriaTransformer.Clone(criteria);
ICriteria pageAggCriteria = CriteriaTransformer.Clone(recordsCriteria);
Если я загляну внутрь этих двух новыхпервый имеет 40 элементов, а второй - 10 - именно то, что я хочу.
Допустим, объекты, возвращающиеся из БД, имеют столбец с именем «ColA», и он имеет тип Int32
.
Исходя из этого, я хочу получить сумму всех 40 значений ColA и сумму первых 10 значений ColA.
Чтобы получить сумму всех 40 значений ColA, я делаю следующее:
totalAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
var totalSum = totalAggCriteria.UniqueResult();
Значение в totalSum верное.
Чтобы получить суммупервые 10 значений ColA, я пробую следующее:
pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
vat pageSum = pageAddCriteria.UniqueResult();
Однако, это дает мне то же значение, что и предыдущее - для всех 40 значений ColA.
У меня естьтакже пробовал следующее, но это дает тот же результат:
pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum(column));
pageAggCriteria.SetFirstResult(firstResult.Value);
pageAggCriteria.SetMaxResults(pageSize.Value);
pageSum = pageAggCriteria.UniqueResult();
А также:
pageAggCriteria.SetFirstResult(firstResult.Value);
pageAggCriteria.SetMaxResults(pageSize.Value);
pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum(column));
pageSum = pageAggCriteria.UniqueResult();
Может кто-нибудь дать представление о том, где я иду не так и как я могу на самом деле получитьсумма значений ColA в первых 10 результатах?
Спасибо