如何编写LINQ查询实现Orders和Details主从表关联结果嵌套列表输出
实现方案
你可以使用LINQ的**组连接(Group Join)**特性实现需求,无需修改现有模型即可直接生成一对多的嵌套结构结果:
1. 查询语法写法
from order in db.Orders join detail in db.Details on order.id equals detail.order into orderDetails // 可选:过滤没有明细的订单,加上下行即可 // where orderDetails.Any() select new OrderDetail { orderId = order.id, details = orderDetails.ToList() }
2. 方法语法写法
var result = db.Orders .GroupJoin( db.Details, order => order.id, detail => detail.order, (order, details) => new OrderDetail { orderId = order.id, details = details.ToList() } ) // 可选:过滤没有明细的订单,加上下行即可 // .Where(o => o.details.Any()) .ToList();
优化方案(EF/EF Core环境适用)
如果你使用的是Entity Framework或者EF Core,推荐在模型中配置导航属性,查询写法会更简洁:
- 先修改
Order模型添加导航属性:
public class Order { public int id { get; set;} // 新增关联明细的导航属性,EF会自动识别外键关系 public List<Detail> Details { get; set;} }
- 直接使用
Include加载关联数据即可:
var result = db.Orders .Include(o => o.Details) // 可选:过滤没有明细的订单 // .Where(o => o.Details.Any()) .Select(o => new OrderDetail { orderId = o.id, details = o.Details }) .ToList();
内容的提问来源于stack exchange,提问作者u936293
相关产品推荐
相关产品推荐

