![]() |
|
Модераторы: gambit |
![]()
|
|
| fvoice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Приветствую всех,
проект ASP.NET с ипользованием orm NHibernate 1.2.1. Нужно реализовать запрос с использованием ICriteriion, аналог следующего SQL:
т.е. выбрать все контракты дата создания которых меньше 25 числа месяца создания понятно что просто вставить строковый литерал "(CAST(MONTH(createddate) as nvarchar) + '.25.2010')" для сравнения с полем CreatedDate нельзя, хибернейт пытается кастовать его к DateTime, и валится.. вариант с использованием ISQLQuery мною рассмотрен, он конечно реализуем, но хотелось бы узнать, может можно решить задачу с использованием условий для ICriteriion? |
|||
|
||||
| fvoice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Напрашивается решение с 12 условиями, типа:
наверное так и сделаю, потому что на ICriterion реализован механизм навешивания условий сортировки, пейджинга и фильтрации.. реализация подобного для ISQLQuery, займет гораздо больше сил. |
|||
|
||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: 1 Всего: 3 |
А просто проверить день нельзя?
Ведь по условию, все контракты меньше 25 числа.
|
|||
|
||||
| fvoice |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
извините ошибся в описании,
правильное условие такое:
т.е. нужно выбрать только записи, созданные позже 25 числа месяца в котором начинает действовать контракт основная проблема этого условия что его нельзя(или я не знаю как) описать в NHibernate критерии из-за наличия в нем функций SQL сервера, которые выполняются для каждой записи уже в момент выполнения запроса. В вашем примере функция DAY это тоже функция SQL сервера, поэтому также не может быть использована.. предложенный мною вариант(уже реализованный) с 12 условиями типа:
хоть и достаточно громоздок, но позволяет выполнить запрос средствами критерии |
||||
|
|||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 5 Всего: 40 |
во-первых, можно добавить в класс отдельное свойство для дня, в мэпинге которого использовать формулу с применением выражений sql.
во-вторых, можно использовать в критерии Expression.Sql и в-третьих если повторить 12 раз для каждого месяца
то это то же самое, что написать -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| fvoice |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Да, вы правы, этот кусок условия тоже не верный, но в хибернетовских выражениях я построил правильно..
"Expression.Sql" 100% то что мне нужно, спасибо большое, попробовал, работает! жалко не могу поднять вам репутацию, 100 постов требуется Это сообщение отредактировал(а) fvoice - 21.7.2010, 07:04 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |