Можно ли сделать это в NHibernate без использования CreateSQLQuery? - PullRequest
0 голосов
/ 20 декабря 2009

Возможно ли сделать это в NHibernate без использования CreateSQLQuery. Желательно с Linq To Nhibernate. Самый большой вопрос, как мне сделать объединения не по первичному ключу?

SELECT DISTINCT calEvent.* From CalendarEvent as calEvent
LEFT JOIN UserChannelInteraction as channelInteraction on channelInteraction.ChannelToFollow_id = calEvent.Channel_id
LEFT JOIN UserCalendarEventInteraction as eventInteraction on eventInteraction.CalendarEvent_id = calEvent.Id
LEFT JOIN UserChannelInteraction as eventInteractionEvent on eventInteractionEvent.UserToFollow_id = eventInteraction.User_id
WHERE (calEvent.Channel_id = @intMainChannelID 
OR channelInteraction.User_id = @intUserID
OR eventInteraction.User_id = @intUserID
OR (eventInteractionEvent.User_id = @intUserID AND eventInteraction.Status = 'Accepted'))
AND calEvent.StartDateTime >= @dtStartDate 
AND calEvent.StartDateTime <= @dtEndDate
ORDER BY calEvent.StartDateTime asc

Ответы [ 2 ]

0 голосов
/ 21 декабря 2009

Вы можете делать произвольные объединения, используя Theta объединения . Тета-соединение - это декартово произведение, поэтому оно приводит ко всем возможным комбинациям, которые затем можно отфильтровать.

В NHibernate вы можете выполнить соединение в тета-стиле следующим образом (HQL):

from Book b, Review r where b.Isbn = r.Isbn

Затем вы можете добавить любые условия фильтрации, упорядочить результаты и все остальное, что вы можете захотеть сделать.

from Book b, Review r where b.Isbn = r.Isbn where b.Title = 'My Title' or r.Name = 'John Doe' order by b.Author asc

Вот статья о тета-соединениях в Hibernate (не NHibernate, но это все еще актуально).

Однако, поскольку тэта-соединение является декартовым продуктом, вы можете подумать дважды и провести некоторое тестирование производительности, прежде чем использовать этот подход для выполнения запроса с тремя соединениями.

0 голосов
/ 20 декабря 2009

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

Проверьте это: http://devlicio.us/blogs/derik_whittaker/archive/2009/04/06/simple-example-of-using-a-subquery-in-nhibernate-when-using-icriteria.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...