LINQ to Nhibernate (3.0): GroupBy и Sum в подзапросе дают NoTImplemented
У меня есть запрос linq, используя nhibernate 3.0. Но он продолжает возвращать ошибку.
threw exception: System.NotImplementedException: The method or operation is not implemented..
Я попробовал то же самое в LINQ 2 SQL, и он работает отлично.
Любое тело имеет представление, что не так... Вот часть моего выбора, это подзапрос с Groupby и SUm.
Amount = (System.Double)
((from m0 in _session.Query<Statement>()
where m0.Code== c.Code
group m0 by new
{
m0.Code
}
into g
select new
{
Expr1 = (System.Double)g.Sum(p => p.Amount)
}).First().Expr1)
};
У меня установлена последняя версия CSR1 Nhibernate, но, похоже, она не работает с моим запросом.
есть идеи?
заранее спасибо
1 ответ
Поставщик LINQ в NH3 в настоящее время находится в состоянии бета-тестирования. Существуют определенные конструкции, которые еще не поддерживаются. (Группа планирует решить эту проблему после выпуска NH3.) Части, вызывающие проблемы в вашем запросе, - это "новый {}" анонимный тип в выражении group by и First() в контексте group by. Оба в настоящее время не реализованы. Следующий запрос выполняется правильно и должен давать те же результаты:
var query = from m0 in session.Query<Statement>()
where m0.Code == c.Code
group m0 by m0.Code into g
select new {Expr1 = g.Sum(p => p.Amount)};
var result = query.ToList().First().Expr1;
Прежде всего обратите внимание, что "new {}" в предложении group by не требуется. Другим изменением было добавление "ToList()". Это заставляет запрашивать результаты из базы данных, а затем мы используем LINQ-to-Objects, чтобы получить результат First(). SQL, сгенерированный для этого запроса:
select cast(sum(statement0_.Amount) as DOUBLE PRECISION) as col_0_0_
from Statement statement0_
where (statement0_.Code is null)
and ('FOO' /* @p0 */ is null)
or statement0_.Code = 'FOO' /* @p0 */
group by statement0_.Code