如何使用linq将共享相同属性的两个列表组合为一个嵌套对象结构

问题描述 投票:0回答:1

我有两个列表对象,其中一个Order,另一个是CouponUsage。类别OrderCouponUsage都具有相同的属性,但目前它们是平面结构,并且没有嵌套,也没有标准化。 (这是根据要求,因此请在此处忽略标准化部分)。类结构是

    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
    }

OrderCouponUsage列表均如下

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实现此目的?

c# linq linq-to-sql linq-to-entities
1个回答
0
投票

您可以为此使用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();
© www.soinside.com 2019 - 2024. All rights reserved.