【问题标题】:c# MVC Pass Group Data to Viewc# MVC 传递组数据来查看
【发布时间】:2014-08-07 20:20:51
【问题描述】:

我有一个显示模型的视图,但在该模型上,我还想显示来自另一个模型的小数据表,该模型来自控制器中的以下 linq

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
}

但出现错误 - 附加信息:“object”不包含“TotalCount”的定义

我认为这必须演员?如果是这样,它会被投射到什么位置?

这是上述情况的最佳方法吗?

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    匿名类型不应跨越方法边界:也就是说,您的 View 不知道 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
    }
    

    【讨论】:

    • 我之前尝试过类似的方法,但至少我知道我的方向是正确的。我对此很陌生。进行这些更改会给我错误“base = {“无法在 LINQ to Entities 查询中构造实体或复杂类型'LearningAndTeaching.Models.LearnerRatingCount'。”}”
    • @user3749535 LearningRatingCount 在哪里定义?如果您尝试在投影中重用实体类(Select 调用),您将收到该错误消息。像我演示的那样使用一个简单的单独 POCO。
    • 谢谢,移动它并删除一段将其链接到我的模型的代码是一种享受。非常感谢。
    猜你喜欢
    • 2023-04-06
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多