【问题标题】:Mysql rank based on column using FluentNhibernate基于使用 FluentNhibernate 的列的 Mysql 排名
【发布时间】:2015-09-08 01:04:30
【问题描述】:

我有下表

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

【问题讨论】:

    标签: c# mysql nhibernate fluent-nhibernate hql


    【解决方案1】:

    我不完全确定查询的内容(在 MySQL 中)。希望您知道如何进行排名,如果不在这里查看示例:

    Get current rank using mysql

    要在 NHibernate 中使用正确的(工作 MySQL),我们必须像这样进行调整:

    NHibernate.ISQLQuery q = session
        .CreateSQLQuery("SELECT student_id, student_name...")
        .SetMaxResults(1)
        ;
    

    重点是,CreateSQLQuery 返回 ISQLQUery,这实际上是原始 SQL,与底层 DB 引擎方言相关。

    之前使用的CreateQuery是关于HQL的,它独立于DB Engine方言...但需要Entity查询(不是原始SQL)

    在这里阅读更多:

    17.1. Using an ISQLQuery

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多