我有下表
学生 [student_id,Student_name,Marks]
我想根据分数对学生进行排名,并使用 FluentNHibernate 按 Student_id 获取具体的排名位置
我在下面写了 hql 查询并得到了
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException: A recognition error occurred. exception.
NHibernate.IQuery q = session
.CreateQuery("SELECT student_id, student_name, marks, @curRank := @curRank + 1 AS rank"+
" FROM Student p, ( SELECT @curRank := 0 ) q " +
" where student_Id = '02610' ORDER BY marks DESC")
.SetMaxResults(1);
我认为问题是 Hql 无法识别 ':=' 如果有人知道如何解决这个问题,请告诉我,谢谢
最佳答案
我不完全确定查询的内容(在 MySQL 中)..希望你知道如何进行排名,如果不查看这里的示例:
<强> Get current rank using mysql
要在 NHibernate 中使用正确的(工作 MySQL),我们必须像这样进行调整:
NHibernate.ISQLQuery q = session
.CreateSQLQuery("SELECT student_id, student_name...")
.SetMaxResults(1)
;
重点是,CreateSQLQuery
返回 ISQLQUery,它实际上是原始 SQL,与底层数据库引擎方言相关。
之前使用的CreateQuery
是关于HQL的,它独立于DB Engine方言......但需要实体查询(不是原始SQL)
在这里阅读更多内容:
17.1. Using an ISQLQuery
关于c# - 使用 FluentNhibernate 基于列的 Mysql 排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982326/