powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate. Сортировка по результату подзапроса.
1 сообщений из 1, страница 1 из 1
NHibernate. Сортировка по результату подзапроса.
    #36600825
komonaut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, есть такая проблема.
Необходимо отсортировать результаты запроса согласно результатам сложного подзапроса по связанной таблице.
Есть таблица заказов ORDERS & связанная таблица счетов INVOICES (по INVOICES.ORDER_ID = ORDERS.ID).
Таблица INVOICES содержит флаг IS_OPEN. Заказ может быть (в зависимости от состояния флагов по его счетам): не оплачен (все INVOICES.IS_OPEN = true), частично оплачен (часть из INVOICES.IS_OPEN = true), оплачен полностью (все INVOICES.IS_OPEN != true).

Я попробовал использовать SqlProjection и успешно получил только результат подзапроса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DetachedCriteria dc = DetachedCriteria.For<Order>();
						IProjection proj = Projections.ProjectionList().Add(Projections.Alias(Projections.SqlProjection(@"(SELECT payedStatus =
case 
      when (SELECT COUNT(*) FROM INVOICE invoice WHERE invoice.IS_OPEN = 1 AND invoice.ORDER_ID = {alias}.ID) > 0 
		AND (SELECT COUNT(*) FROM INVOICE invoice WHERE invoice.IS_OPEN = 1 AND invoice.ORDER_ID = {alias}.ID) = (SELECT COUNT(*) FROM INVOICE invoice WHERE AND invoice.ORDER_ID = {alias}.ID
) then 1 
      when (SELECT COUNT(*) FROM INVOICE invoice
WHERE (SELECT COUNT(*) FROM INVOICE invoice WHERE invoice.IS_OPEN = 1 AND invoice.ORDER_ID = {alias}.ID) > 0 AND (SELECT COUNT(*) FROM INVOICE invoice WHERE invoice.IS_OPEN = 1 AND invoice.ORDER_ID = {alias}.ID)
		 <> (SELECT COUNT(*) FROM INVOICE invoice WHERE invoice.ORDER_ID = {alias}.ID) then 0
      else 2 
end) as payedStatus ", new[] { "payedStatus " }, new IType[] { NHibernateUtil.Int32 }), "PayedStatus"));
						dc.SetProjection(proj)
					.AddOrder(new Order("PayedStatus", Asc));

В данном случае, если я использую
Код: plaintext
return dc.GetExecutableCriteria(session ).List<Order>();
то получаю ексепшн. Если добавить перед этим
Код: plaintext
dc.SetResultTransformer(Transformers.AliasToBean(typeof(Order)));
то получаю список(List) пустых Order'ов. Я попытался добавить остальные свойства Order используя
Код: plaintext
.Add(Projections.Property(""))
но получил тот же самый пустойList .

Каким способом я могу отсортировать список моих заказов по PayedStatus, полученному из подзапроса?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate. Сортировка по результату подзапроса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]