[英]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.