NHibernate и группа в другой класс - PullRequest
1 голос
/ 28 февраля 2012

у меня запланирован классSalesInYear

 public class PlannedSalesInYear{
      Vehicle _vehicle;
      int _year;
      int _plannedSales;

      ... Fields as Properties ...

 }

Картирование этого класса не должно быть ракетостроением, поэтому я оставлю это в стороне. Теперь я хочу выбрать данные для всех транспортных средств, в результате чего получается словарь.

Словарь должен выглядеть так:

 IDictionary<Vehicle, IDictionary<int, int>>

Возможно ли это с помощью гибернации (предпочтительные критерии api)? Я хочу избежать Linq из-за проблем с производительностью. Так что дао должен прямо выбрать словарь.

Заранее спасибо Тоби

1 Ответ

0 голосов
/ 28 февраля 2012

две поездки туда и обратно

// get the results
IDictionary<Vehicle, IDictionary<int, int>> results = session.Query<PlannedSalesInYear>()
    .Select(ps => new { VehicleId = ps.Vehicle.Id, ps.Year, ps.PlannedSales })
    .AsEnumerable()
    .GroupBy(a => a.VehicleId)
    .ToDictionary(
        gr => session.Load<Vehicle>(gr.Key),
        gr => (IDictionary<int, int>)gr.ToDictionary(a => a.Year, a => a.PlannedSales));

// initialize the vehicles
session.QueryOver<Vehicle>().WhereRestrictionOn(v => v.Id).IsIn(results.Keys.Select(v => v.Id).ToArray()).List();

или одна поездка туда и обратно с большим количеством данных

// initialize the vehicles
session.Query<PlannedSalesInYear>()
    .Fetch(ps => ps.Vehicle)
    .AsEnumerable()
    .GroupBy(a => a.Vehicle)
    .ToDictionary(
        gr => gr.Key,
        gr => (IDictionary<int, int>)gr.ToDictionary(a => a.Year, a => a.PlannedSales));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...