面试题答案
一键面试假设使用的是EF Core,以下是优化后的LINQ查询代码:
using (var context = new YourDbContext())
{
var result = context.Orders
.Where(order => order.OrderDetails.Sum(detail => detail.Quantity * detail.Product.Price) > 1000)
.Select(order => new
{
Order = order,
Products = order.OrderDetails.Select(detail => new
{
ProductName = detail.Product.Name,
Quantity = detail.Quantity
})
})
.ToList();
}
优化策略
- 避免不必要的JOIN:通过导航属性直接关联表,减少复杂的JOIN操作,EF Core会自动生成高效的SQL查询。
- 尽早过滤:在
Where
子句中使用Sum
计算总金额并过滤出满足条件的订单,避免加载不必要的数据。 - 投影:使用
Select
只选择需要的字段,减少数据传输和处理量。