我有一个在SQL Management Studio中运行的SQL查询:
选择ID 从表t 其中t.Date = (选择最大(日期) 来自( 选择 * 从ReferenceId = xy)u)的表格
原因是,从具有某个外键的所有条目中,我想要收到一个 最高的日期。
我试图改进这个查询以便在NHibernate中使用,我得到了
IQuery query = session.CreateQuery(String.Format(
@"Select t.Id
From table t
Where t.Date =
(Select Max(Date)
From (Select *
From table t where t.ReferenceItem.Id = " + item.ReferenceItem.Id + ")u)"));
我收到错误消息:“预期”
如何构建NHibernate查询? “In”是什么意思?
答案 0 :(得分:3)
要执行 SQL 查询,您必须使用CreateSQLQuery
代替CreateQuery
。
后者创建 HQL 查询。
答案 1 :(得分:1)
“in expected”意味着映射和查询尝试运行不匹配。
HQL查询会在映射到您的类时使用令牌。因此,它们的SQL功能非常有限:它们只允许所选Dialect允许的内容。
答案 2 :(得分:1)
您应该验证您的映射文件属性,看看您是否正在使用嵌入式资源,否则,您将继续收到此错误
答案 3 :(得分:0)
好的,我可以正确构建查询,它应该是
"Select t.Id
From table t
Where t.Date =
(Select Max(u.Date)
From table u where u.ReferenceItem.Id = " + item.ReferenceItem.Id + ")"