2014-06-17 60 views
0

我有哪裏我顯示模型的視圖,但在模型我想也是從那個來自於以下幾個LINQ在控制器中的另一個模型顯示數據的一張小桌子C#MVC山口組數據查看

var StudentRatings = db.LearnerRatings 
       .Where(i => i.LessonId == id) 
       .GroupBy(i => i.Rating) 
       .Select(group => new { Rating = group.Key, TotalCount = group.Count() }); 

ViewBag.Ratings = StudentRatings; 

我已經從控制器返回另一個模型,所以已經添加到ViewBag。 我想我將能夠通過這些迭代在foreach

foreach (var ratings in ViewBag.Ratings){ 
     @ratings.TotalCount 
} 

但得到一個錯誤 - 附加信息:「對象」不包含定義「TOTALCOUNT」

我把它這有被施放?如果是的話它會被鑄造成什麼?

這是上述最好的方法嗎?

回答

1

匿名類型不應該遍歷方法的邊界:也就是說,您的視圖不知道ratings是什麼類型。

更改您的匿名類型來命名結構或類,那麼你可以做它像這樣:

class Rating { 
    public Int32 Rating { get; set; } 
    public Int32 TotalCount { get; set; } 
} 

... 
.Select(group => new Rating { Rating = group.Key, TotalCount = group.Count() }); 
... 

foreach(Rating rating in ViewBad.Ratings) { 
    @rating.TotalCount 
} 
+0

我以前曾嘗試過類似的事情,但至少我知道我是在正確的方向。我對此很新。進行這些更改會給我錯誤「base = {」實體或複雜類型'LearningAndTeaching.Models.LearnerRatingCount'不能在LINQ to Entities查詢中構建。「}」 – user3749535

+0

@ user3749535「LearningRatingCount」的定義在哪裏?如果您嘗試在投影中重新使用實體類(「選擇」調用),您將收到該錯誤消息。像我演示的那樣使用一個簡單的單獨POCO。 – Dai

+0

謝謝,移動它並刪除一段將其鏈接到我的模型的代碼是一種享受。非常感激。 – user3749535