Что ж, довольно интересно, мой NH 3.2 фактически завершается с MismatchedTreeNodeException
для еще более простых запросов при попытке получить значение из ввода в Select
внутри запроса. Какую версию вы используете?
В любом случае, похоже, что вы просто не можете использовать значения вне запроса в проекции (Select
), и это, вероятно, ограничение Linq в NHibernate. Кажется, ваша версия кэширует скомпилированное выражение из Select
, игнорируя тот факт, что оно зависит от переменной. DateTime
значение одинаково для всех звонков, не так ли?
Немного более чистый обходной путь может пойти так:
.Select(g => new
{
Year = g.Key.Year,
Month = g.Key.Month,
TotalPageCount = g.Count(),
PublicPageCount = g.Count(p => p.State == PageState.Public && p.Published <= DateTime.UtcNow)
})
.AsEnumerable()
.Select(g => new Archive
{
ContextPageId = rootPage.Id,
Year = g.Year,
Month = g.Month,
TotalPageCount = g.TotalPageCount,
PublicPageCount = g.PublicPageCount
})
.ToList();
РЕДАКТИРОВАТЬ Я посмотрел немного внимательнее, и это действительно уже известная ошибка NHibernate. См. эту запись в блоге и эту запись об ошибке JIRA .