2 回答

TA貢獻1880條經驗 獲得超4個贊
我正在嘗試將您的查詢轉換為對數據庫更友好的版本。
var vehicles = vehiclesAndQuotes
.GroupBy(vehicleAndQuote =>
new {
vehicleAndQuote.Vehicle.VehicleMakeName,
vehicleAndQuote.Vehicle.VehicleModelTypeName,
vehicleAndQuote.Vehicle.VehicleEdition
})
.Select(a => new {
// DB friendly
vehicle = a.First(),
plans = a.GroupBy(quote => quote.Quote.YearlyMileage)
})
.AsEnumerable() // May o may not be needed / passing to LINQ to Objects
.Select(a => {
var vehicle = _mapper.Map<VehicleAndQuote, CatalogVehicle>(a.vehicle);
var plans = a.plans.Select(group => _mapper.Map<IEnumerable<VehicleAndQuote>, LeasingPlan>(group));
vehicle.LeasingPlans = plans;
return vehicle;
});
return vehicles.ToList(); // This should be avoided, specially if you are processing a large collection.
這樣您就可以在數據庫端進行雙重分組。另外,我直到最后才將整個系列具體化。

TA貢獻1811條經驗 獲得超5個贊
檢查中生成的查詢SQL Profiler
。您的查詢正在(N+1 problem)
對vehicle
和 中的每條記錄進行選擇plans
。如果您正在使用Entity Framework 2.0
,您應該知道它在GroupBy
本地運行并將所有數據從數據庫中提取到內存中SELECT *
,然后將它們分組到內存中。將您的查詢分解為每個實體的多個查詢。不要LINQ
像First()
在Select
LINQ函數中那樣使用函數,因為它會導致N+1 SQL Issue
. 將您的 EF 版本升級到 2.1 或更高版本以避免Local GroupBy
出現問題。
- 2 回答
- 0 關注
- 247 瀏覽
添加回答
舉報