2012-05-07 56 views
0

我需要一份報告,顯示每天唯一身份訪問者的數量。這裏是查詢:使用LINQ在MVC中創建報告

SELECT User.Name 
     ,Visit.VisitDate 
     ,COUNT(Visit.Id) AS NumOfVists 
FROM Visit JOIN User ON Visit.UserId = User.Id 
GROUP BY User.Name, Visit.VisitDate 

我已經創建了用戶(表)模型和訪問(表)模型使用代碼優先。我也有引用這兩個模型(表)的dbcontext類。在我的控制器中,我需要將此查詢的結果傳遞給View。

首先,我是否必須創建此記錄集的模型?如果是,我是否創建了一個名爲say的模型,REPORT包含名爲Name,VisitDate和NumOfVisits的3個成員?

如果是這樣的話,這個查詢的LINQ版本會是什麼樣子?我如何將它傳遞給視圖?

+2

看起來你真的沒有試圖自己解決這個問題。你要求我們爲你解決這個問題,但是我會給你帶來懷疑的好處,並假定你還在學習MVC。 –

回答

0

您可以將查詢結果直接傳遞到視圖中。你不需要爲它創造任何額外的東西,但如果你願意的話也可以。至於如何把它傳遞到視圖中使用

return View(your model); 
+0

但是我的模型是什麼?我的查詢結果是什麼類型?因爲一個View只接受一個模型 – ebeygin

+0

模型只是一個對象,沒什麼特別的。您的查詢結果取決於您如何調用它。它可以是來自數據集,數據讀取器,匿名對象,自定義對象的任何內容。 當您收到查詢結果時,可以將其放入另一個對象中或僅發送給視圖。這取決於你決定如何去做,沒有單一的答案。 發佈你想出的LINQ或ADO代碼來執行查詢,然後我們可以幫助你更好地回答你的問題。 –

1

很難不知道你的確切模式說,還是你要如何安排的結果,但我想的是,LINQ的版本會是這樣的:

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new {g.Key.Name, g.Key.VisitDate, Count = g.Count()}; 

這會給你一個IEnumerable<x>結果,其中x是一個匿名類型有三個成員:一個字符串,一個DateTime,以及一個Int。你不需要爲此創建一個ViewModel,但是你可以如果你想要:

from u in User 
from v in u.Visit 
group v by new { u.Name, v.VisitDate } into g 
select new MyViewModel 
{ 
    Name = g.Key.Name, 
    VisitDate = g.Key.VisitDate, 
    Count = g.Count() 
}; 
+0

謝謝,但是你的LINQ表達式的前兩行是正確的嗎?用戶和訪問都是表格......那麼,u.Visit如何存在?這是我到目前爲止..前兩行:從用戶 加入v訪問u.Id等於v.UserId到j ..我如何將它連接到分組部分? – ebeygin

+0

@ebeygin - 這就是爲什麼我說這取決於你的模式。如果您的用戶對象包含訪問集合,您應該這樣做。否則,只需將第二行替換爲「在u.Id等於v.UserId上訪問時加入v」。 –

+0

@ebeygin - 編輯過的評論,查看新版本。 –