我有一个包含付款时间表列表的发票列表,付款时间表包含期刊集合。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