Session.QueryOver:什么是错误:类型报告组的变量'rg'从范围引用,但它没有定义“是什么意思?

时间:2013-08-23 14:55:00

标签: nhibernate queryover

这是查询:

 var reportingGroupYears = _session.QueryOver<ReportingGroup>()
                            .Where(x => x.Number == request.ReportingGroupNumber)
                            .Select(rg=> rg.Year.ToString())
                            .List<string>();

我不明白它有什么问题。也不允许将'rg'定义为字符串,因为它给出的消息是rg与父范围中定义的含义不同。

1 个答案:

答案 0 :(得分:1)

在这种情况下,Select子句是NHibernate的一个问题。它期望将属性(在表达式树解析期间)转换为SELECT语句。但是有一个方法调用:.ToString()

如何解决问题的一种方法可能是明确Projection这样(请参阅文档QueryOver 16.6. Projections

var reportingGroupYears = session
    .QueryOver<ReportingGroup>()
    .Where(x => x.Number == request.ReportingGroupNumber)
    .Select(Projections.ProjectionList()
        .Add(Projections.Cast(NHibernateUtil.String, Projections.Property("Year"))
        ))
        .List<string>();