我的查询是返回不是表值

本文关键字:返回 查询 我的 | 更新日期: 2023-09-27 18:07:21

我有财务合规和合规表。下面我的查询工作流程是得到一个最新的行。问题是我在表中有空值,因为我删除了表中的所有行,但我下面的查询是返回一个旧行。

var Compliance = (from c in datamodel.Compliances
                              join f in datamodel.FinancialCompliances on c.ComplianceId equals f.ComplianceId
                              where (c.VerifierId == userId || c.OwnerId == userId || c.UserId == userId) && (f.ComplianceId == c.ComplianceId)
                              orderby (f.AddedDate)
                              select f);
            financialCompliance = Compliance.ToList().LastOrDefault();

有什么问题吗?

我的查询是返回不是表值

听起来好像您可能正在删除数据模型实例中的对象,但没有保存更改并重置数据模型,从而使旧记录仍然保留在上下文中,即使它们不在数据库中。为安全起见,请尝试为该查询使用新上下文。

另外,您可能需要考虑修改查询,使结果按降序排列,然后选择最上面的,而不是按升序排列,只取最后一个:

var Compliance = (from c in datamodel.Compliances
                  join f in datamodel.FinancialCompliances on c.ComplianceId equals f.ComplianceId
                  where (c.VerifierId == userId || c.OwnerId == userId || c.UserId == userId) && (f.ComplianceId == c.ComplianceId)
                  orderby (f.AddedDate) descending
                  select f);
financialCompliance = Compliance.FirstOrDefault();

可能lastordefault正在发送默认值。你能否确认你的返回对象中确实有真实的数据?

代码的一个明显问题是在LastOrDefault()之前调用ToList()。这将导致代码将所有数据从存储加载到应用程序和上下文中,然后从结果中检索最后一个对象。我怀疑这可能会引起一些问题。

尝试跳过你的。tolist()并直接调用LastOrDefault()