帖子中的评论数量

时间:2013-04-09 17:24:33

标签: c# asp.net-mvc linq razor data-access-layer

我正在尝试计算帖子中的评论数量(尝试创建某种博客)并将其显示在帖子的标题中。这是一些代码。

我的模特:

public class Post
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Message { get; set; }
    public string Author { get; set; }
    public DateTime DateTime { get; set; }

    public List<Comment> Comments { get; set; }
}

public class Comment
{
    public int ID { get; set; }
    public int PostID { get; set; }
    public string Message { get; set; }
    public string Author { get; set; }
    public DateTime DateTime { get; set; }
}

我的控制器:

public ActionResult Index()
{
    var dbPosts = (from p in db.Posts
                orderby p.ID descending
                select p).ToList();

    return View(dbPosts);
}

我的观点:

@foreach (var post in Model) {
    **@post.Comments.Where(x => x.PostID == post.ID).Count()**

    <h3>@Html.ActionLink(post.Title, "Details", new { id = post.ID })</h3>
    <span class="written">skrevet d. @post.DateTime.ToLongDateString() @post.DateTime.ToShortTimeString() af @post.Author</span>
    <p>@post.Message</p>
    <hr />
}

我用星星标记了我的错误。它给我一个错误,说“价值不能为空。”

任何可以帮助我解决这个问题的人?

亲切的问候和提前谢谢

1 个答案:

答案 0 :(得分:3)

在您的foreach循环视图中,您正在访问您的帖子,所以只需执行

@post.Comments.Count

另外我认为您在Controller中的查询可能会延迟加载评论,当您将它们发送到View时它们实际上并不包括在内,所以急切加载评论:

var dbPosts = db.Posts.Include("Comments").OrderByDescending(p => p.ID).ToList();