2012-04-19 61 views
0

我有這個NHibernate的性判據的正常工作NHibernate的Expression.In拋出異常

var amount = (decimal)Session.CreateCriteria<Transaction>() 
    .Add(Expression.Eq("Account.Id", accountId)) 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.GroupProperty("Account.Id")) 
     .Add(Projections.Sum("InvoiceGross"), "total")) 
    .SetMaxResults(1) 
    .SetResultTransformer(Transformers.AliasToEntityMap) 
    .UniqueResult<IDictionary>()["total"]; 

,但是當我開始添加Expression.In這樣

var amount = (decimal)Session.CreateCriteria<Transaction>() 
    .Add(Expression.Eq("Account.Id", accountId)) 
    .Add(Expression.In("StatusType.Id", statusTypes)) 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.GroupProperty("Account.Id")) 
     .Add(Projections.Sum("InvoiceGross"), "total")) 
    .SetMaxResults(1) 
    .SetResultTransformer(Transformers.AliasToEntityMap) 
    .UniqueResult<IDictionary>()["total"]; 

任何想法,爲什麼會發生,由way statusTypesint[]類型

它開始拋出一個異常"Object reference not set to an instance of an object."

這是SQL查詢我要實現

SELECT SUM(InvoiceGross) AS total 
FROM Transactions 
WHERE (AccountID = @accountId) (statusTypeID IN (1,2,3,4)) 
GROUP BY AccountID 

回答

2

的錯誤,即拋出,因爲你沒有得到從數據庫的唯一結果。您可以使用SQL事件探查器或NHProf監控生成的SQL,然後針對數據庫運行該查詢以查看查詢是否確實正在返回數據。

此外,然後再開始使用使用ResultTransformer只是將它轉換爲一個簡單的列表,看看你得到一個數組列表與Account.Id作爲數組的第一個項目,和是第二個項目即嘗試

var amount = (decimal)Session.CreateCriteria<Transaction>() 
    .Add(Expression.Eq("Account.Id", accountId)) 
    .Add(Expression.In("StatusType.Id", statusTypes)) 
    .SetProjection(Projections.ProjectionList() 
     .Add(Projections.GroupProperty("Account.Id")) 
     .Add(Projections.Sum("InvoiceGross"), "total")) 
    .SetMaxResults(1) 
    .List(); 

var sum=amount[0][1]; 
+0

是的,我得到了我有一個異常,這給了我的想法,我的錯誤來自何處,UniqueResult給我的問題,因爲我返回一個空數據。 +1 – Raymund 2012-04-22 20:02:24