2014-04-07 38 views
1

我使用Nhibernate 3.3.3.4001與SybaseSQLAnywhere12Dialect,並嘗試使用總和linq函數中的簡單計算。Nhibernate Linq計算的原因NotSupportedException

我想使用Linq而不是HQL來實現這一點,並很樂意將Nhibernate的默認linq擴展爲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 

如果同一查詢沒有它正確地進行計算,因此感到困惑,爲什麼總和()是行不通的總和()函數來運行。

回答

1

有:

var result = ((from c in session.Query<Entity>() 
       select c.FieldValue).Sum())/100; 

生成的查詢還可以通過移動除法運算算出總數的優化在Linq組函數(Max,Min,Sum)函數中使用常量時,這是一個懸而未決的問題。如果使用其他字段,它將正常工作。內的NHibernate 3.3.3
https://nhibernate.jira.com/browse/NH-3376

1

你可以嘗試重寫你的LINQ查詢了一下,就像這樣:

SELECT SUM(FieldValue)/100 FROM TableName 
+0

由於

實測值錯誤,則總和外面劃分上的SQL將優化查詢。 我給出的例子太簡單了,我需要對每行的值計算增值稅。不幸的是,遺留數據庫持有增值稅百分比作爲整數,在每行上執行計算(值*增值稅)之前必須除以100。因此我必須在linq查詢中執行除法。 –

相關問題