我的查询是返回而不是表值

时间:2013-04-04 16:58:09

标签: c# asp.net-mvc linq entity-framework

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

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

有什么问题?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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();