Linq where集合中的集合子句

end*_*rif 2 c# linq linq-to-entities entity-framework

我有一份包含付款时间表列表的发票清单,付款时间表包含一组期刊.

发票 - >付款计划 - >付款计划日记帐

我希望获得付款计划日记帐状态为"到期"和"逾期"的所有发票.

我无法获得Linq声明以获得第二级深度.

我正在尝试这样的事情没有成功(状态是状态列表):

i => i.PaymentSchedules.Any(p => p.PaymentScheduleJournals.Where(ps => statuses.Contains(ps.Status)))
Run Code Online (Sandbox Code Playgroud)

Man*_*eld 6

试试这个:

var invoices = Invoices.Where(
               i => i.PaymentSchedules.Where(
                    p => p.PaymentScheduleJournals.Where(
                         ps => statuses.Contains(ps.Status))
                    .Any())
               .Any());
Run Code Online (Sandbox Code Playgroud)

请记住,Any()返回truefalse找到任何匹配的项目,而不是项目本身.因此Any(),在代码中使用它的位置实际上不会返回任何数据.

此外,如果单独运行此查询将返回付款计划(不确定这是否只是您在问题中的表达式的一部分),而不是发票.

进一步说明:此查询查找任何具有PaymenScheduleJournal的PaymentSchedules,其状态在有效状态列表中.请记住,调用Where()将返回实际的查询项,但对于期刊,这不是我们想要的:我们希望所有具有有效期刊的计划.这就是Any()给我们的东西- 任何有日记的日程表.我们重复相同的流程来加载任何具有有效付款时间表的发票,因为发票是我们实际经过的(通知没有第三次调用Any()).