我使用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,但它似乎与我的查询无关..
任何想法?
提前致谢
答案 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