簡體   English   中英

使用LINQ在列表中過濾列表

[英]Filter list within list using LINQ

我有以下課程:

class Order
{
    public string AccountNumber;
    public string AccountName;
    public List<OrderLine> OrderLines = new List<OrderLine>();
    public DateTime StartDate;
    public DateTime EndDate;       
}

class OrderLine
{
     public string Description;
     public string ProductCode;
     public double Duration;
     public int Quantity;
}

根據以下條件獲取Order對象列表的LINQ代碼是什么?

  1. [訂單]帳號等於“ 1234”
  2. [OrderLine]數量大於10

假設您希望所有記錄都符合這兩個條件(對於任何令人滿意的OrderLine ,否則請更改為All() ):

public static void IEnumerable<Order> GetQualifying(this IEnumerable<Order> orders, string accountNo, int minQty) {
    return orders.Where(o =>
        o.AccountNumber == accountNo
        && o.OrderLines.Any(ol => ol.Quantity >= minQty);
}

請小心不要出現一個錯誤,因為我從字面上解釋了“最小數量”。

另外, this語法非常適合編寫擴展方法 ,該方法允許您這樣調用:

Order[] orders = //stuff;
Order[] qualifiedOrders = orders.GetQualifying("1234", 9).ToArray();

請注意,我建議您在不再能從延遲評估中受益時,立即將其用作ToArray() ,否則對原始IEnumerable<>進行后續操作將導致重新評估 (閱讀:再次枚舉集合)。

您可以選擇:

list.Where(x => x.AccountNumber == "12345" && x.OrderLines.Any(o => o.Quantity > 10));

要么:

list.Where(x => x.AccountNumber == "12345" && x.OrderLines.All(o => o.Quantity > 10));

取決於您是否要檢索AccountNumber12345OrderLine數量大於10的所有對象,還是所有OrderLine數量大於10的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM