C# 简单HQL语句无法执行查询
我是NHibernate和HQL的新手,但是我试图执行一个HQL语句,但是我得到了以下错误C# 简单HQL语句无法执行查询,c#,nhibernate,hql,C#,Nhibernate,Hql,我是NHibernate和HQL的新手,但是我试图执行一个HQL语句,但是我得到了以下错误 An exception of type 'NHibernate.Exceptions.GenericADOException' occurred in NHibernate.dll but was not handled in user code Additional information: Could not execute query[SQL: SQL not available] 有人能帮我
An exception of type 'NHibernate.Exceptions.GenericADOException' occurred in NHibernate.dll but was not handled in user code
Additional information: Could not execute query[SQL: SQL not available]
有人能帮我找到我犯了什么错误吗
代码
var valoresAgregadosAnoAtual2 = _repositorio.GetReceitas2<ReceitaGeral>(
"SELECT MONTH(p.DateHourDataCreation), SUM(p.Value) " +
"FROM Receita p " +
"WHERE YEAR(p.DateHourDataCreation) = YEAR(GETDATE()) " +
"GROUP BY MONTH(p.DateHourDataCreation) " +
"ORDER BY MONTH(p.DateHourDataCreation)");
public class ReceitaGeral
{
[Required]
public virtual int MonthNumber { get; set; }
[Required]
public virtual double ValueMonth { get; set; }
}
public IEnumerable<T> GetReceitas2<T>(string sql)
{
var context = new NHibernateHelper();
var receitas = context.ConsultaHql<T>(sql);
return receitas;
}
public IList<T> ConsultaHql<T>(string sqlQuery)
{
ISession session = GetSession();
IQuery query = session.CreateQuery(sqlQuery);
return query.List<T>();
}
我运行了NHibernate生成的SQL语句,它在SQL Server中运行良好
更新
var valoresAgregadosAnoAtual2 = _repositorio.GetReceitas2<ReceitaGeral>(
"SELECT MONTH(p.DateHourDataCreation), SUM(p.Value) " +
"FROM Receita p " +
"WHERE YEAR(p.DateHourDataCreation) = YEAR(GETDATE()) " +
"GROUP BY MONTH(p.DateHourDataCreation) " +
"ORDER BY MONTH(p.DateHourDataCreation)");
public class ReceitaGeral
{
[Required]
public virtual int MonthNumber { get; set; }
[Required]
public virtual double ValueMonth { get; set; }
}
public IEnumerable<T> GetReceitas2<T>(string sql)
{
var context = new NHibernateHelper();
var receitas = context.ConsultaHql<T>(sql);
return receitas;
}
public IList<T> ConsultaHql<T>(string sqlQuery)
{
ISession session = GetSession();
IQuery query = session.CreateQuery(sqlQuery);
return query.List<T>();
}
下图显示查询返回2个值,我认为它应该返回对我的类ReceitGeral的引用。我怎么做
如果我从Receita中放入一个HQL语句,如,它将返回对Receita类的引用,现在我想要一个对ReceitaGeral的引用
您就快到了,只需要结果转换器和每个列的正确别名
别名(请参见作为MonthNumber
和作为ValueMonth
):
ReceitaGeral
是一个映射类还是一个用于返回查询结果的类?只是一个用于返回查询结果的类。映射的是Receita。
var valoresAgregadosAnoAtual2 = _repositorio.GetReceitas2<ReceitaGeral>(
"SELECT MONTH(p.DateHourDataCreation) AS MonthNumber, SUM(p.Value) AS ValueMonth" +
"FROM Receita p " +
"WHERE YEAR(p.DateHourDataCreation) = YEAR(GETDATE()) " +
"GROUP BY MONTH(p.DateHourDataCreation) " +
"ORDER BY MONTH(p.DateHourDataCreation)");
public IList<T> ConsultaHql<T>(string sqlQuery)
{
ISession session = GetSession();
IQuery query = session.CreateQuery(sqlQuery);
return query
.SetResultTransformer(Transformers.AliasToBean<T>()) // e.g. T is ReceitaGeral
.List<T>();
}