0

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

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();

问题是什么?

4

3 回答 3

0

也许 lastordefalt 正在发送默认值。您能否确认您在返回的对象中确实有真实数据?我怀疑会是这样。

于 2013-04-04T17:11:48.163 回答
0

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

尝试跳过您的 .ToList() 并直接调用 LastOrDefault() 。

于 2013-04-04T18:16:31.637 回答
0

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

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

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();
于 2013-04-04T19:32:55.413 回答