linq - Linq 根据公共字段将子实体附加到父实体
问题描述
我有一个父母和孩子作为单独的对象。现在我必须根据连接条件将两者结合起来。我的实体是
public class Customer
{
private int customerId;
private string customerName;
private List<Order> orders;
}
public class Order
{
private int customerId;
private int orderId;
private string OrderName;
}
这里,customerId 是连接字段。
我有客户列表,但它只有 CustomerId 和 CustomerName 数据。它没有订单(每个客户的订单对象都是空的)我有 _orders 作为单独的对象,如下所示。
List<Customer> _customers;
List<Order> _orders;
现在我必须同时加入,最后,我需要 _customers 对象,它也应该有 _orders。
我已经使用 foreach 语句将订单附加到每个客户,如下所示。
_customers.ForEach(c =>
{
c.orders = _orders.Where(o => o.customerId == c.customerId).ToList();
});
但是,我想排除 foreach 循环并尝试通过连接条件。有人可以帮忙吗?提前致谢。
解决方案
你可以GroupJoin
用来实现这一点:
List<Customer> result = _customers.GroupJoin(_orders,
c => c.customerId,
o => o.customerId,
(c, o) => new Customer
{
customerId = c.customerId,
customerName = c.customerName,
orders = o.ToList()
}).ToList();
在 dotnetfiddle 中测试:https ://dotnetfiddle.net/OJN480
我希望你觉得这有帮助。