我有一张发票清单和一份付款时间表清单,而付款时间表有一组日记账。
发票->付款时间表->付款时间表日志
我想得到所有发票,有付款时间表,日记账状态,到期和逾期。
我无法让Linq语句深入到第二层。
我正在尝试这样的方法,但没有成功(状态是一个状态列表):
i => i.PaymentSchedules.Any(p => p.PaymentScheduleJournals.Where(ps => statuses.Contains(ps.Status)))
发布于 2013-10-22 13:03:03
试试这个:
var invoices = Invoices.Where(
i => i.PaymentSchedules.Where(
p => p.PaymentScheduleJournals.Where(
ps => statuses.Contains(ps.Status))
.Any())
.Any());
请记住,如果找到任何匹配项,Any()
将返回true
或false
,而不是项目本身。因此,在代码中包含Any()
时,实际上不会返回任何数据。
此外,如果由自己运行,此查询将返回付款计划(不确定这是否只是您在问题中的表达式的一部分),而不是发票。
进一步说明:此查询查找在有效状态列表中具有PaymenScheduleJournal状态的任何PaymenScheduleJournal。请记住,对Where()
的调用将返回实际的查询项,但对于日志,这不是我们想要的:我们需要所有具有有效日志的计划。这就是Any()
给我们的--任何有日记的时间表。我们重复相同的过程来加载任何有有效付款时间表的发票,因为发票是我们真正想要的(请注意没有第三次调用Any()
)。
发布于 2013-10-22 13:44:09
您可以使用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)));
https://stackoverflow.com/questions/19518627
复制相似问题