c# - 使用 FluentNhibernate 基于列的 Mysql 排名

标签 c# mysql nhibernate fluent-nhibernate hql

我有下表

学生 [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/

相关文章:

nhibernate - 如何在 NHibernate 中获取部分对象?

c# - 使用ITextSharp从两个分隔线之间的PDF中提取文本

php - 使用 PHP 创建多边形

nhibernate - NHibernate 中带有 Select 和 OrderBy 的 QueryOver

java - 线程中的异常 "main"org.hibernate.InvalidMappingException : Could not parse mapping document from resource userdata. hbm.xml

php、mysql 和 phpmyadmin、MAMP 或 Homebrew 软件

c# - 继续获取 "Unable to load DLL ' SQLite.Interop.dll' :"in VS 2017 with C# .net 4.6.1

c# - 如何用单个 <BR> 替换多个换行符?

c# - 是否有通用方法来迭代和打印未知集合中的值?

c# - 如何从 SPWeb 获取 SPWebApplication?