2010-11-23 57 views
1

我有一个使用nhibernate 3.0的linq查询。但它不断返回一个错误。LINQ to Nhibernate(3.0):GroupBy和Sum在子查询中给出未实现

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,但它只是似乎并没有与我的查询工作..

什么想法?

在此先感谢

回答

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到对象来获得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 
+0

感谢詹姆斯,但我得到一个编译错误......“无法转换的源类型System.Linq.IQueryable <表达式1:双重>目标类型双”这里是我的代码 - 记住Amount是另一个查询的一部分..并且amount是一个DOUBLE(subquery)Amount =(从this._session.Query中的m0开始()m0.ClientCode == c.ClientCode group m0 by m0.ClientCode into g选择新的{Expr1 = g.Sum(p => p.Amount)})}; – Martin 2010-11-24 15:43:23