2015-05-30 96 views
1

我想使用内部连接的HQL。但是,引发了查询语法异常。NHibernate HQL内部连接(SQL Server,Visual C#)

这是我的C#代码:

string sqlQuery = "Select fq FROM Answers as fq INNER JOIN Questions as q " + 
    " on fq.questionId=q.questionId"; 

IList Result; 
int count = 0; 

try 
{ 
    using (ISession session = ConnectionModule.OpenSession()) 
    { 
     IQuery query = session.CreateQuery(sqlQuery); 
     session.CreateCriteria(typeof(Answers)); 
     Result = query.List(); 
    } 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message+"\n"+ex.InnerException); 
} 
+3

你可以粘贴显示异常? – wmk

+0

不知道是否是问题,但您至少可以尝试更改别名:“如果fq是列,或者”Select * FROM Answers as fq INNER ...“,则选择fq FROM Answers作为INNER ... if你想要“fq”的东西。你只是不能“选择”一张桌子。 – Tim3880

回答

0

点这里

  • CROSS JOIN如果没有映射关系,
  • JOIN现有(映射)关系。

所以,在情况下,有没有映射关系QuestionAnswer - 我们仍然可以查询它是这样的:

// instead of INNER JOIN we use 'comma' to produce CROSS JOIN 
// instead of ON we need WHERE 
// string sqlQuery = "Select fq FROM Answers as fq, INNER JOIN Questions as q "+ 
// "on fq.questionId=q.questionId"; 

string sqlQuery = "Select fq FROM Answers as fq, Questions as q " + 
    " WHERE fq.questionId=q.questionId"; 

在情况下,我们有映射Answer.QuestionIList<Answer> Question.Answers

// the Reference (C#) is the way how to express ON 
string sqlQuery = "Select fq FROM Answers as fq INNER JOIN fq.Questions as q"; 

检查

+0

不幸的是研究。错误是“查询语法异常”我想要做的事实;表1 =问题(questionId,问题),表2 =答案(answerId,questionId,答案)Sql Query =“select q.question,a.answer from qq内部联接答案as a on q.questionId = a.questionId” – Geda

+0

你有没有试过我向你展示过的东西?大多数十字会加入WHERE?尝试按照我的答案,并链接..并相信与否,这应该给你你需要的结果... –

+0

似乎你在最后...它真的很棒! ;)享受强大的NHibernate,先生 –