2012-10-01 10 views
0

得到最新記錄我使用代碼首先,實體,MVC3 +剃鬚刀,我們有對他們有很多步驟(其中也有被審計)性能,從第2臺

我有形式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,因爲這似乎是結合使用的最佳工具,但我沒有足夠的時間來了解這一點,而不是僅僅爲了得到這份工作完成「,所以不知道它是否會有所幫助。

回答

0

還不夠完善,但

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

肯定縮短了代碼。

0

考慮使用數據庫視圖。

並在FormID和DateOfAction列上創建一個數據庫索引。