字段表达式GroupBy不返回包含的对象

问题描述 投票:0回答:1

使用此代码:

var dbrepayments = _context.Repayments.Include("Loan").Include("Loan.Borrower").Include("Loan.LoanProduct")
                           .Where(c => c.PaidOn == null && c.DateOfRepayment <= today)
                           .GroupBy(c => c.Loan.Id, (key, g) => g.OrderByDescending(c => c.Id).FirstOrDefault())
                           .OrderBy(c => c.DateOfRepayment);

[_context是我使用代码优先方法从数据库中获取结果的ApplicationDbContext类型。

问题是,当我尝试遍历dbrepayments并获取LoanLoan.BorrowerLoan.LoanProduct对象的值时,它们显示为null。但是,当我删除GroupBy时,这些对象将正确返回。

c# .net asp.net-mvc entity-framework code-first
1个回答
0
投票

我敢打赌,这里的问题是您的GroupBy语句中的元素选择器:

(key, g) => g.OrderByDescending(c => c.Id).FirstOrDefault()

当我第一次阅读它时,这没有多大意义。您要按贷款分组还款,然后尝试仅选择每笔贷款的最后一次还款?然后按日期订购这些第一笔还款。

我相信这将为您提供与渴望的加载关系相关的结果:

var dbrepayments = _context.Repayments.Include("Loan").Include("Loan.Borrower").Include("Loan.LoanProduct")
                           .Where(c => c.PaidOn == null && c.DateOfRepayment <= today)
                           .GroupBy(c => c.Loan.Id)
                           .Select(c => c.OrderByDescending(x => x.Id).FirstOrDefault())
                           .OrderBy(c => c.DateOfRepayment);

GroupBy将尊重Include,但是如果您使用选择表达式,它将覆盖它。您无法在选择器内添加Include,因为它正在处理IEnumerable预期结果。相反,将结果按预期分组,然后按结果分组Select以获取最新的还款额。这将为您提供最新还款清单,然后您可以订购。

© www.soinside.com 2019 - 2024. All rights reserved.