nHibernate Expression.In抛出异常

时间:2012-04-19 02:40:27

标签: c# nhibernate fluent-nhibernate

我有这个nHibernate Critera可以正常工作

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"];

任何想法为什么会发生这种情况,顺便提一下 statusTypes int[] 类型

它开始抛出异常"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

1 个答案:

答案 0 :(得分:2)

错误即被抛出是因为您没有从数据库中获得唯一的结果。是否可以使用SQL事件探查器或NHProf监视生成的sql,然后针对db运行该命令以查看查询是否确实返回数据。

在开始使用ResultTransformer之前,只需将其转换为一个简单的List,看看你是否得到一个数组列表,其中Account.Id作为数组的第一项,而sum是第二项,即尝试

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];