NHibernate和Group by到另一个类

本文关键字:另一个 by Group NHibernate | 更新日期: 2023-09-27 18:25:58

我有一个计划的课程SalesInYear

 public class PlannedSalesInYear{
      Vehicle _vehicle;
      int _year;
      int _plannedSales;
      ... Fields as Properties ...
 }

这一类的测绘不应该是火箭科学,所以我把它排除在外。现在,我想为所有车辆选择数据,生成一个字典。

字典应该是这样的:

 IDictionary<Vehicle, IDictionary<int, int>>

这可能使用hibernate(首选标准api)吗?由于性能问题,我想避开林克。所以dao应该直接选择字典。

提前感谢Tobi

NHibernate和Group by到另一个类

两次往返

// 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));