[英]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代碼是什么?
假設您希望所有記錄都符合這兩個條件(對於任何令人滿意的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));
取決於您是否要檢索AccountNumber
為12345
且OrderLine
數量大於10的所有對象,還是所有OrderLine
數量大於10的對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.