性能分为2个表,从第2个表中获取最新记录

时间:2012-10-01 08:17:45

标签: c# sql linq entity-framework

我正在使用Code First,Entities,MVC3 + Razor,我们的表格中包含许多步骤(也必须经过审核)

我有FormsSteps,所以模型看起来像这样。

public class MyForm
{
    public int FormId { get; set; }
    public Guid UniqueReferenceId { get; set; }
    public DateTime DateCreatedOn { get; set; }
    public string Name { get; set; }
    public string DetailsOfContact { get; set; }

    public virtual ICollection<AuditItem> AuditItems { get; set; }
}

public class AuditItem
{
    public int AuditItemId { get; set; }
    public int FormId { get; set; }
    public string ActionByUserUid { get; set; }
    public DateTime DateOfAction { get; set; }
    public int Step { get; set; }

    public virtual MyForm MyForm { get; set; }
}

当我想显示一个显示表单摘要信息的用户界面以及它所处的最新步骤时,就会出现问题,详细说明提交的许多表单的进度,以及它们所处步骤的表格以及摘要。即使只有少量记录,性能也很糟糕,更不用说当我们有数千个记录时。我必须在表格中查询:

我必须从最近的日期开始,而不仅仅是最新的“步骤”数字,因为表单可以返回上一步。

int latestAuditStep = myForm.AuditItems
    .OrderByDescending(ai => ai.DateOfAction)
    .Select(ai => ai.Step)
     .First();

显然这是非常昂贵的,我正在寻找一种更好的方法来解决这个建模问题。

注意:理想情况下我会喜欢使用WWF,因为这似乎是最好的工具,但是我没有足够的时间来了解这一点,而不仅仅是“完成工作” ',所以不知道它是否会有所帮助。

2 个答案:

答案 0 :(得分:0)

考虑使用数据库视图。

在FormID和DateOfAction列上创建数据库索引。

答案 1 :(得分:0)

仍然不完美,但

return AuditItems.OrderBy(ai => ai.DateOfAction).Last()

肯定会缩短代码。