我想用linq複製下面的SQL查詢。在SQL Server上需要花費幾分之一秒的運行:加速linq查詢
select g.reference, count(*)
from isis.dbo.[group] as g inner join
isis.dbo.enrolment as e on g.groupid = e.groupid inner join
isis.dbo.student as s on e.studentid = s.studentid inner join
isis.dbo.progression as p on s.studentid = p.studentid
where p.academicyear = '12/13' and g.istutorgroup = 1
group by reference
在我的MVC應用程序,我想過去「TutorGroups」的上市的看法。對於視圖中的每個導師組,我需要顯示關於他們的各種信息,其中一個項目是他們進行的「進步」訪談的次數。
我已經嘗試了一些方法,但他們都採取向上的30秒在我的MVC應用程序中運行:
<%TTMrequired = tg.Enrolments
.SelectMany(e => e.Student.Progressions
.Where(p => p.TTMChecked == false &&
p.TTMInterview == true &&
p.AcademicYear == year))
.Count(); %>
和
<%TTMrequired = tg.Enrolments
.Where(e => e.Student.Progressions
.Any(p => p.TTMChecked == false &&
p.TTMInterview == true &&
p.AcademicYear == year))
.Count(); %>
任何人有我如何能加快任何建議這起來了嗎?我懷疑問題是我試圖做一個愚蠢的方式 - 通常是!
這些陳述如何相關? SQL版本通過引用查詢「組」表和組。我在LINQ版本中找不到類似的東西。 –
對不起,我應該提供更多的細節 - 我編輯了我的問題,包括細節。該視圖有一個傳遞給它的「導師組」的列表,並通過一個foreach循環遍歷每個學生制定學生對該組進行的「進階」訪問次數。 – Chris
如果這是一個MVC應用程序,爲什麼你在V中這樣做?它應該是模型的一部分。你想用這個查詢來達到什麼目的?回到問題可能有助於隔離更好的解決方案。特別是,我在質疑看起來是「必需」標誌的分組/計數。另外,使用一個分析器來確保你沒有在一個循環內調用它(例如在網格中綁定)。 –