Nhibernate Session.QueryOver:什么是错误:变量';rg';从范围引用的ReportingGroup类型,但未定义;什么意思?

Nhibernate Session.QueryOver:什么是错误:变量';rg';从范围引用的ReportingGroup类型,但未定义;什么意思?,nhibernate,queryover,Nhibernate,Queryover,以下是查询: var reportingGroupYears = _session.QueryOver<ReportingGroup>() .Where(x => x.Number == request.ReportingGroupNumber) .Select(rg=> rg.Year.ToString())

以下是查询:

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

我不明白它怎么了。也不允许将“rg”定义为字符串,因为它会给出一条消息,表明它将赋予rg与父范围中定义的含义不同。

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

解决这个问题的一种方法是像这样的显式投影(参见文档QueryOver)

var reportingGroupYears=会话
.QueryOver()
.Where(x=>x.Number==request.ReportingGroupNumber)
.Select(Projections.ProjectionList())
.Add(Projections.Cast(NHibernateUtil.String,Projections.Property(“年”))
))
.List();

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

解决这个问题的一种方法是像这样的显式投影(参见文档QueryOver)

var reportingGroupYears=会话
.QueryOver()
.Where(x=>x.Number==request.ReportingGroupNumber)
.Select(Projections.ProjectionList())
.Add(Projections.Cast(NHibernateUtil.String,Projections.Property(“年”))
))
.List();

为什么需要将年份转换为字符串?可以查看ReportingGroup和request的定义吗?为什么需要将年份转换为字符串?可以查看ReportingGroup和request的定义吗?
var reportingGroupYears = session
    .QueryOver<ReportingGroup>()
    .Where(x => x.Number == request.ReportingGroupNumber)
    .Select(Projections.ProjectionList()
        .Add(Projections.Cast(NHibernateUtil.String, Projections.Property("Year"))
        ))
        .List<string>();