簡體   English   中英

如何使用 linq 過濾子列表的列表?

[英]How to filter list with linq for sub list?

我有以下課程:

    public class Customer
    {
        public string CustomerId;
        public string CustomerName;
        public List<CustomerOrder> Orders;
    }

    public class CustomerOrder
    {
        public string OrderName;
        public string Account;
        public string PassFail;
    }

我想要做的是我只需要獲取該帳戶的 PassFails = "F" 為零的客戶記錄。 例如,如果我有 CustomerId = 1 和兩個 Orders for Account = "1000" 一個 PassFail = "P" 和一個 = "F"。 我不希望我的結果集中有客戶記錄。 所以到目前為止我有以下幾點:

//get accounts where any order failed
var failedAccounts = customers.SelectMany(s => s.Orders)
                    .Where(w => w.PassFail == "F")
                    .GroupBy(g => g.Account)
                    .Select(g => new
                    {
                        Account = g.Key
                    });

我被困在這一點上,因為我正在嘗試獲取我的客戶列表,其中該帳戶的所有訂單都已通過。 希望這是有道理的。 我想仍然保留訂單記錄,因為我需要知道其中一個訂單是否通過,但在稍后階段我需要過濾掉客戶記錄。 謝謝大家

customers.Where(s => s.Orders.All(o => o.PassFails == "F"))

然后添加任何你想要的

示例代碼中的customers.SelectMany()是從客戶(但不是客戶本身)中選擇所有Orders 我們可以使用customers.Where()來選擇Customers ,然后過濾具有PassFail值為"F"任何訂單的帳戶,我們可以使用Any擴展方法(來自System.Linq ):

var failedAccounts = customers.Where(s => s.Orders.Any(o => o.PassFails == "F"));

相反,如果我們想找到訂單全部通過的客戶,我們可以使用All

var passedAccounts = customers.Where(s => s.Orders.All(o => o.PassFails == "P"));

暫無
暫無

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

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