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
Другие вопросы по тегам