我有一段ASP.NET MVC應用程序,我現在正在使用LINQ to SQL一段時間。我已經在LINQ中複製了大多數查詢,但是現在有一件事讓我陷入了困境。在LINQ中複製SQL查詢
我想選擇一個條件滿足的「進步」列表,並且我有一個組列表。
我ERD如下:
「集團」 1 < - >很多 「擴招」 許多< - > 1 「學生」 1 < - >很多 「級數」
而且標準的SQL將是(除了在代碼中,我有一組特定羣體傳遞給函數):
SELECT dbo.[Group].GroupID, COUNT(*) AS returning
FROM dbo.[Group] INNER JOIN
dbo.Enrolment ON dbo.[Group].CourseID = dbo.Enrolment.GroupID INNER JOIN
dbo.Student ON dbo.Enrolment.StudentID = dbo.Student.StudentID INNER JOIN
dbo.Progression ON dbo.Student.StudentID = dbo.Progression.StudentID
WHERE (dbo.Progression.IsReturning = 0)
GROUP BY dbo.[Group].GroupID
現在的Web應用程序。 ASP視圖「Progression」通過varibale「groups」,它是幾個選定組的列表。我目前使用的follwing代碼,這是很慢(30秒或更多加載頁面)
<%foreach (var tg in Model)
{%>
<% notreturning = 0; %>
<%foreach (Enrolment e in tg.Enrolments)
{
notreturning = notreturning + e.Student.Progressions.Where(p => !p.IsReturning).Count();
}%>
<tr>
<td><% = notreturning %></td>
</tr>
<%
} %>
我指望一些其他的東西太多,但在這個例子中,我會堅持的。現在顯然這很慢,因爲它必須爲團體做一些事情,然後對於每個團隊中的每個人來說,所以大約有10個團隊,每個團隊中有20個學生。我deally我想要做這樣的事情,它消除了第二的foreach如下:
<%foreach (var tg in Model)
{%>
<% notreturning = 0; %>
<%var test = tg.Enrolments.Where(e => e.Student.Progressions.Where(p => !p.IsReturning)).Count(); %>
<tr>
<td><% = notreturning %></td>
</tr>
<%
} %>
代碼不爲工作的嵌套的where子句不返回布爾數據類型,但我希望得到什麼防空火炮我正試着在這裏做。
我不確定我是否已經解釋得很好,但如果有人有任何想法,我會非常感激,這已經讓我煩惱了好幾天!
您可以定義要在界面中顯示的內容(以功能的方式)。這對我來說不是很清楚。 – Steven 2011-03-22 11:13:53
基本上我只是試圖爲選定列表中的每個組創建一個表格,並且爲每個組計算勾選了「IsReturning」字段的學生人數。 因此,在僞代碼中:計數IsReturning = true的組中的學生。重複每組。 – Chris 2011-03-22 13:22:01