0

我正在使用 Code First、Entities、MVC3 + Razor,我们的表单中有很多步骤(也必须经过审核)

我有Forms,其中有Steps,所以模型看起来像这样。

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,因为这似乎是结合使用的最佳工具,但我没有足够的时间来学习这一点,而不仅仅是“完成工作”,所以不知道它是否有帮助。

4

2 回答 2

0

考虑使用数据库视图。

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

于 2012-10-01T16:05:34.473 回答
0

仍然不完美,但

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

当然缩短了代码。

于 2012-11-29T09:19:01.930 回答