2012-02-28 70 views
1

我有一個類plannedSalesInYear這個類的NHibernate和集團通過另一個類

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

     ... Fields as Properties ... 

} 

映射,所以我離開它應該是沒有火箭科學。 現在我想選擇導致字典的所有車輛的數據。

的解釋應該是這樣的:

IDictionary<Vehicle, IDictionary<int, int>> 

這可能使用休眠(首選標準API)? 我想避免Linq因爲性能問題。所以道應直接選擇到詞典。

預先感謝託比

回答

0

2往返

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