2010-05-27 3 views
1

У меня есть запрос SQL, который работает в SQL Management Studio:SQL запросов в NHibernate дикции

Выбрать Id Из таблицы т Где t.Date = (выберите Max (Date) Из ( Select * Из таблицы где 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? Что означает «В»?

ответ

1

«в ожидании» означает, что существует несоответствие для отображения и запроса, пытающегося выполнить.

Запросы HQL ожидают токенов, поскольку они сопоставляются с вашими классами. Таким образом, они очень ограничены возможностями SQL: они позволяют только то, что позволяет выбранный Dialect.

3

Для выполнения запросов SQL, вы должны использовать CreateSQLQuery вместо CreateQuery.

Последнее создает HQL запросов.

+0

+1 Я даже не обратил внимания на запрос, поэтому сделал неправильное предположение –

+0

Очень полезный комментарий, спасибо. – AGuyCalledGerald

0

Хорошо, я мог правильно построить запрос, он должен быть

"Select t.Id 
      From table t 
      Where t.Date = 
       (Select Max(u.Date) 
       From table u where u.ReferenceItem.Id = " + item.ReferenceItem.Id + ")" 
1

Вы должны проверить свои свойства отображения файлов, чтобы увидеть, если вы используете встроенный Resourse, в противном случае, вы будете продолжать получать эту ошибку

Смежные вопросы