我有一個包含付款時間表列表的發票列表,付款時間表包含期刊集合。Linq where集合中的集合條款
發票 - >付款時刻表 - >付款時間表期刊
我想有到期逾期的付款時間表雜誌狀態的所有發票。
我無法獲得Linq語句來深入二級。
我想這樣的事情沒有成功(狀態爲狀態列表):
i => i.PaymentSchedules.Any(p => p.PaymentScheduleJournals.Where(ps => statuses.Contains(ps.Status)))
我有一個包含付款時間表列表的發票列表,付款時間表包含期刊集合。Linq where集合中的集合條款
發票 - >付款時刻表 - >付款時間表期刊
我想有到期逾期的付款時間表雜誌狀態的所有發票。
我無法獲得Linq語句來深入二級。
我想這樣的事情沒有成功(狀態爲狀態列表):
i => i.PaymentSchedules.Any(p => p.PaymentScheduleJournals.Where(ps => statuses.Contains(ps.Status)))
試試這個:
var invoices = Invoices.Where(
i => i.PaymentSchedules.Where(
p => p.PaymentScheduleJournals.Where(
ps => statuses.Contains(ps.Status))
.Any())
.Any());
記住Any()
回報true
或false
如果有匹配物品被找到,而不是物品本身。因此,在代碼中使用Any()
並不會返回任何數據。
另外,如果單獨運行(不確定這是否只是表達式的一部分),而不是發票,此查詢將返回付款時間表。
進一步說明:此查詢查找具有有效狀態列表中狀態的PaymenScheduleJournal的任何PaymentSchedules。請記住,致電Where()
將返回實際的查詢項目,但就期刊而言,這不是我們想要的:我們希望擁有有效期刊的所有時間表。這就是Any()
給我們的 - 任何有日誌的日程安排。我們重複相同的流程來加載任何具有有效付款時間表的發票,因爲發票是我們實際發生的事情(請注意第三次致電Any()
)。
您可以使用SelectMany
投影算子。
var validStatuses = new List<string>{"Due", "Overdue"};
var invoices = allInvoices
.Select(invoice => invoice.Schedules
.SelectMany(paymentSchedule => paymentSchedule.Journals)
.Where(journal => validStatuses.Contains(journal.Status)));
這導致我得到未知變量的同樣的錯誤,我 – endyourif
關於收益支付時間表,而不是發票最後的編輯似乎是缺陷。 – endyourif
我想我縮小了一點: i => i.PaymentSchedules.Where(p => p.PaymentScheduleJournals.Where(ps => statuses.Contains(ps.Status))。Any())。Select p => p.InvoiceId).Contains(i.Id) – endyourif