2015-04-22 38 views
1

我有一個Asp.Mvc5的網站,我們有索姆性能問題,這裏是我們的模型:Linq的性能問題

我們已經包含部分列表的調查,每個區域有子的列表,每個子節有一系列問題。一個小節可以出現在幾個部分中(我們需要另一個表來存儲小節的順序)。

問題有問題子部分,它確定給定子部分中問題的順序(問題可以存在於幾個子部分中)。

我們有一個公司的列表,每個公司都有一個答案列表。 我們的網站按照上述模型定義的順序顯示給定公司的答案列表。

我弄清楚,以下行需要2秒執行代碼的分析後:

foreach(var section in Survey.ordredBy(s => s.Order) 
{ 
    foreach(var subSection in section.SebSections.ordredBy(s => s.Order) 
    { 
    foreach(var question in subSection .Questions.ordredBy(s => s.Order) 
    { 
    //this query cause a perfermance issues 
    var answer = company.Answers.Where(c => c.QuestionId == questionId); 
    } 
    } 
} 

你有什麼建議給我解決這個問題? 在此先感謝。

+1

基礎上貼出的代碼,我必須假設你已經有'questionId'的值了。如果這是真的,那麼所有'foreach'語句都是多餘的(不需要),因爲'foreach'語句中的'var'值都不會在任何地方使用。殺死'foreach'語句。 –

回答

1

您正在調查中針對每個問題運行一個查詢。如果您有很多問題,那可能需要一段時間。

而是在數據庫的一個請求中查詢您將需要的所有答案,例如,像

var allAnswers = company.Answers.Where(c => c.SurveyId == surveyId); 

希望的答案知道(有參考)什麼問題,他們是,這些問題知道他們是什麼小節等

+0

但我必須尊重在調查中定義的答案的順序 –

+0

使用OrderBy按部分排序,然後分節,然後問題。仍是一個查詢。 –