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)
试试这个:
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()返回true或false找到任何匹配的项目,而不是项目本身.因此Any(),在代码中使用它的位置实际上不会返回任何数据.
此外,如果单独运行此查询将返回付款计划(不确定这是否只是您在问题中的表达式的一部分),而不是发票.
进一步说明:此查询查找任何具有PaymenScheduleJournal的PaymentSchedules,其状态在有效状态列表中.请记住,调用Where()将返回实际的查询项,但对于期刊,这不是我们想要的:我们希望所有具有有效期刊的计划.这就是Any()给我们的东西- 任何有日记的日程表.我们重复相同的流程来加载任何具有有效付款时间表的发票,因为发票是我们实际经过的(通知没有第三次调用Any()).