Mysql排名基于使用FluentNhibernate的列

时间:2015-06-22 14:19:38

标签: c# mysql nhibernate fluent-nhibernate hql

我有下表

学生[student_id,Student_name,Marks]

我想根据分数对学生进行排名,并使用FluentNHibernate通过student_id获得具体的排名位置

我写了下面的hql查询并得到了

  

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:识别错误   发生了。异常。

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无法识别':=' 如果有人知道如何解决这个问题,请告诉我,谢谢

1 个答案:

答案 0 :(得分:0)

我不完全确定查询的内容(在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的,它独立于数据库引擎方言......但需要实体查询(不是原始SQL)

在这里阅读更多内容:

17.1. Using an ISQLQuery