Entity Framework在嵌套实体上使用Where子句

4

我正在尝试使用以下方法在检索中过滤子对象

var loanExtractExample = be.LoanCategoryMonitors
                .Where(lcm => lcm.LoanNumber == 5000435)
                .Include(l => l.Loan)
                .Include(le => le.LoanExtracts)
                .Select(le => le.LoanExtracts.Borrowers.Where(b => b.BorrowerNum == 1))
                .ToList();

但是当我检查实体集合时,有两个借款人。一个BorrowerNum为1,另一个为BorrowerNum为3。

我错过了什么,导致无法将借款人减少到正确的借款人?


1
我认为你想要的不是ToList(),而是SingleOrDefault()?但如果你计划有多个BorrowerNum = 1,那么可能不是这样。 - James Whyte
@JamesWhyte仍然显示2个借款人实体。在BorrowerNum = 1的贷款中,应该只有1个借款人。 - Tim
也许你需要在 .Select(le => ... 语句中使用 SingleOrDefault/ToList,在 Where(b=>b.BorrowerNum == 1) 之后。 - James Whyte
1
那里也没有运气。 - Tim
@Tim 3 = [Extent3].[BorrowerNum] 看起来 一切都不正确,因为你在问题中期望 BorrowerNum == 1。如果你期望得到帮助,请对问题的每个方面进行更具体的描述(包括预期和实际输出的精确描述,完整的 SQL 等)。 - grek40
显示剩余9条评论
1个回答

0

我认为选择借款人将返回具有ID 1的借款人的贷款类别监视器,其中监视器有一个借款人。我相信你要找的是:

var matchingBorrowers = be.LoanCategoryMonitors
                .Where(lcm => lcm.LoanNumber == 5000435)
                .SelectMany(le => le.LoanExtracts.Borrowers) // Borrowers for loan extracts against loan 5000435...
                .Where(b => b.BorrowerNum == 1)) // Of those borrowers, those with BorrowerNum = 1.
                .ToList();

由于您没有检索贷款类别监视器,因此不需要包括。但是,您可能希望在返回的借款人的子引用上添加任何.Include()语句。(在.SelectMany()之后)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接