我有两个列表对象,其中一个Order
,另一个是CouponUsage
。类别Order
和CouponUsage
都具有相同的属性,但目前它们是平面结构,并且没有嵌套,也没有标准化。 (这是根据要求,因此请在此处忽略标准化部分)。类结构是
public class Order
{
public int ProductId { get; set; }
public int CustomerId { get; set; }
public int OrderId { get; set; }
// Few other Properties of OrderDetail
}
public class CouponUsageDetail
{
public int ProductId { get; set; }
public int CustomerId { get; set; }
public int OrderId { get; set; }
// Few other Properties form CouponUsageDetail
}
Order
和CouponUsage
列表均如下
List<Order> orders = new List<Order>();
orders.Add(new Order { CustomerId = 101, OrderId = 201, ProductId = 301 });
orders.Add(new Order { CustomerId = 501, OrderId = 601, ProductId = 701 });
List<CouponUsageDetail> couponUsageDetails = new List<CouponUsageDetail>();
couponUsageDetails.Add(new CouponUsageDetail { CustomerId = 101, OrderId = 201, ProductId = 301 });
couponUsageDetails.Add(new CouponUsageDetail { CustomerId = 501, OrderId = 601, ProductId = 701 });
现在,我想使用上面的列表创建一个对象,因为一个Order
将在其下具有所有的CouponUsages
。因此,现在我要使用for loop
如下创建它。
List<dynamic> nestedOrderCouponStructure = new List<dynamic>();
foreach (var order in orders)
{
nestedOrderCouponStructure.Add(new {
Order = order,
CouponUsageDetail = couponUsageDetails.Where(r => r.CustomerId == order.CustomerId && r.ProductId == order.ProductId && r.OrderId == order.OrderId)
});
}
如何使用linq实现此目的?
您可以为此使用Select
方法并创建匿名对象列表
var nestedOrderCouponStructure = orders.Select(o => new
{
Order = o,
CouponUsageDetail = couponUsageDetails.Where(r =>
r.CustomerId == o.CustomerId && r.ProductId == o.ProductId && r.OrderId == o.OrderId)
}).ToList();