LINQ to Nhibernate (3.0): GroupBy и Sum в подзапросе дают NoTImplemented - PullRequest
1 голос
/ 23 ноября 2010

У меня есть запрос 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 Ответ

3 голосов
/ 24 ноября 2010

Поставщик 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
...