Перевести запрос в NHibernate - PullRequest
0 голосов
/ 22 апреля 2010

Я пытаюсь изучить NHibernate, и у меня возникают трудности с переводом SQL-запроса в один с использованием API критериев.

Модель данных имеет таблицы: Часть (Id, Имя, ...), Заказ (Id, PartId, Qty), Отгрузка (Id, PartId, Qty)

Для всех деталей я хочу найти общее количество заказанного и общее количество отгруженного. В SQL у меня есть:

select shipment.part_id, sum(shipment.quantity), sum(order.quantity)  
  from shipment cross join order
  on order.part_id = shipment.part_id
  group by shipment.part_id

В качестве альтернативы:

select id, 
   (select sum(quantity) from shipment where part_id = part.id), 
   (select sum(quantity) from order where part_id = part.id)
  from part

Но последний запрос выполняется вдвое дольше.

Любые предложения о том, как создавать эти запросы в (свободно) NHibernate? У меня есть все таблицы сопоставлены и загрузки / сохранения / и т. Д. Объекты отлично работает.

1 Ответ

2 голосов
/ 28 апреля 2010

Ну, я не совсем понимаю вашу модель, но, возможно, этот критерий подойдет вам. В противном случае проверьте документацию NHibernate для критериев API Разделы Проекция, агрегация и группировка .

List results = session.CreateCriteria(typeof(Shipment))
    .CreateAlias("Order", order)
    .SetProjection (Projections.ProjectionList()
        .Add (Projections.GroupProperty("id"), "id)
        .Add (Projections.Sum ("Quantity"), "shipmentQuantity)
        .Add (Projections.Sum ("order.Quantity"), "orderQuantity)
    ).List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...