的,這是我的表達:Optimalisation拉姆達查詢
var d = DateTime.Now.AddDays(-60);
return db.Orders
.Where(o => o.CreateDate > d && o.Status > 3)
.Join(db.OrderItems, o => o.OrderId, o => o.OrderId, (o, p) => new { Order = o, OrderItem = p })
.Join(db.Customers, o => o.Order.CustomerId, o => o.CustomerId, (o, p) => new { o.Order, o.OrderItem, Customer = p })
.GroupBy(p => new {p.Customer.CustomerId, p.Customer.Name})
.Select(o => new CustomerMonthSale
{
CustomerId = o.Key.CustomerId,
Name = o.Key.Name,
Price = o.Sum(p => p.OrderItem.Price * p.OrderItem.Quantity)
})
.OrderByDescending(o => o.Price)
.Take(10).ToList();
它需要6秒。它應該提供大約100條記錄,但在查詢結束時,我會得到前10名。當計數訂單和orderItems時,它正在訪問可能有幾千條記錄。我懷疑問題在於數據庫的大小,因爲我有類似的表達式訪問數據量較大的6倍,它需要400毫秒。我認爲它的選擇......但實際上我不知道。
需要多長時間才能執行?您訪問了多少條記錄? –
[Code Review](http://codereview.stackexchange.com/) – DGibbs
需要6秒。它應該提供大約100條記錄,但在查詢結束時,我會得到前10名。當計數訂單和orderItems時,它正在訪問可能有幾千條記錄。我懷疑問題在於數據庫的大小,因爲我有類似的表達式訪問數據量較大的6倍,它需要400毫秒。我認爲它的選擇......但實際上我不知道。 – Manog