c# Linq查询子列表

本文关键字:列表 查询 Linq | 更新日期: 2023-09-27 18:06:34

我有一个如下所示的类结构,其中我有一个OrderItems列表,每个项目都有一个折扣列表

public class Order
{
    public IList<OrderItem> OrderItems = new List<OrderItem>();
}
public class OrderItem
{
    public IList<Discount> Discounts = new List<Discount>();
}
public class Discount
{
    public string Desc { get; set; }
    public decimal Amount { get; set; }
    public bool IsActive { get; set; }
}

如果我想获得IsActive标志为true的所有折扣的列表,我该如何在Linq查询中做到这一点?

目前这是我所拥有的,但是它非常丑陋,有2个foreach语句需要删除。

IList<Discount> activeDiscounts = new List<Discount>();
        foreach (OrderItem item in order.OrderItems)
        {
            var aDiscounts = from discount in item.Discounts.AsEnumerable()
                    where discount.IsActive == true
                    select discount;
            foreach (Discount discount in aDiscounts)
            {
                activeDiscounts.Add(discount);
            }
        }

c# Linq查询子列表

这是一行linq语句:

order.OrderItems.SelectMany(item => item.Discounts.Where(discount => discount.IsActive));