MST
星途 面试题库

面试题:C# LINQ高级优化题

在一个复杂的业务场景中,有多个数据库表通过外键关联,例如Order表、OrderDetail表、Product表。Order表包含订单基本信息,OrderDetail表记录订单的详细产品信息,Product表存储产品的具体信息。现在需要通过LINQ查询出所有订单中总金额大于1000元的订单及其包含的产品名称和数量。请写出优化后的LINQ查询代码,并说明你采取的优化策略。
12.0万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

假设使用的是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();
}

优化策略

  1. 避免不必要的JOIN:通过导航属性直接关联表,减少复杂的JOIN操作,EF Core会自动生成高效的SQL查询。
  2. 尽早过滤:在Where子句中使用Sum计算总金额并过滤出满足条件的订单,避免加载不必要的数据。
  3. 投影:使用Select只选择需要的字段,减少数据传输和处理量。