我正在将Nhibernate 3.3.3.4001与SybaseSQLAnywhere12Dialect一起使用,并尝试在sum linq函数中使用简单计算。
我想使用Linq而不是HQL来实现这一点,并且很乐意使用默认的linq将Nhibernate扩展到hql生成器。
使用以下Linq查询引发异常
System.NotSupportedException:表达式类型' NhSumExpression'此SelectClauseVisitor不支持
Linq查询
var query = (from c in session.Query<Entity>()
select c.FieldValue / 100M).Sum()
预期的SQL语句
SELECT SUM(FieldValue / 100.0) FROM TableName
如果在没有Sum()函数的情况下运行相同的查询,它会正确执行计算,因此很难理解为什么Sum()不起作用。
答案 0 :(得分:1)
您可能会尝试重写一下LINQ查询,就像这样:
var result = ((from c in session.Query<Entity>()
select c.FieldValue).Sum()) / 100;
也可以通过将除法运算符移出总和来优化结果查询:
SELECT SUM(FieldValue) / 100 FROM TableName
答案 1 :(得分:1)
在Linq组函数(Max,Min,Sum)函数中使用常量时存在一个未解决的问题。如果使用其他字段,它将正常工作。
在NHibernate 3.3.3中发现错误 https://nhibernate.jira.com/browse/NH-3376