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>();