LINQ to Nhibernate(3.0):子查询中的GroupBy和Sum给出NoTImplemented

时间:2010-11-23 16:43:32

标签: linq nhibernate linq-to-nhibernate

我使用nhibernate 3.0进行了linq查询。但它不断返回错误。

   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)
  };

我安装了Nhibernate的最新CSR1,但它似乎与我的查询无关..

任何想法?

提前致谢

1 个答案:

答案 0 :(得分:3)

NH3中的LINQ提供商目前处于测试状态。有些构造尚不支持。 (团队计划在NH3发布后解决此问题。)在查询中导致问题的部分是group by子句中的“new {}”匿名类型和group by上下文中的First()。两者目前尚未实施。以下查询正确执行,并应给出相同的结果:

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;

首先请注意,group by子句中的“new {}”不是必需的。另一个变化是添加“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