2015-05-30 5 views
1

Я хочу использовать HQL с внутренней связью. Но возникает исключение синтаксиса запроса.NHibernate HQL Inner Join (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 FROM Answers как INNER ...», если fq является столбцом или «Выберите * FROM Answers как fq INNER ...», если вам нужны вещи от «fq». Вы просто не можете «выбрать» таблицу. – Tim3880

ответ

0

Дела здесь

  • CROSS JOIN, если нет отображенных отношений,
  • РЕГИСТРИРУЙТЕСЬ на существующих (преобразованные) отношениях.

Таким образом, в случае, нет сопоставляются отношение Question к Answer - мы все еще можем запросить его так:

// 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.Question и IList<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, question), Таблица2 = Ответы (answerId, questionId, ответ) Sql Query = "select q.question, a.answer from Questions as q internal join Ответы как на q.questionId = a.questionId" – Geda

+0

Вы пробовали то, что я вам показал? В основном Крест объединяется с ГДЕ? попытайтесь следовать моему ответу и ссылкам .. и верьте или нет, это должно дать вам результаты, которые вам нужны ... –

+0

Кажется, вы делаете это в конце ... Это действительно здорово! ;) Наслаждайтесь могучим NHibernate, сэр –