【问题标题】:Number of comments in post帖子中的评论数
【发布时间】:2013-04-01 06:26:24
【问题描述】:

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

我的模型:

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 />
}

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

谁能帮我解决这个问题?

提前致以诚挚的问候和感谢

【问题讨论】:

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


    【解决方案1】:

    在 foreach 循环中的视图中,您正在访问您的帖子,所以就这样做

    @post.Comments.Count
    

    此外,我认为您在 Controller 中的查询可能会延迟加载评论,并且当您将它们发送到您的视图时它们实际上并未包含在内,因此急切加载评论:

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

    【讨论】:

    • 效果很好,谢谢。有没有办法在没有 Lambda 的情况下做到这一点?更像我发布的方式,使用 from,orderby 等?整个 MVC 世界的新手,还没有完全了解这部分内容。这里的婴儿步骤:D
    • 啊太快了.. 刚试过 var dbPosts = (from p in db.Posts.Include("Comments")... 效果很好
    • 我是用 lambdas 写的,因为我没有使用您的查询方法,也不知道在哪里放置 .Include :) 如果它解决了您的问题,请接受我的回答。 :)
    • @KasperHyldalPedersen - 在视图中加载 cmets 违反了关注点分离,因为它将数据库逻辑放入视图中。保持视图简单,并确保在执行之前加载所需的所有数据。
    • 好吧 :) Lambda 似乎更易于阅读 - 我想这将是我进入 MVC 的下一个重要步骤 :) 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2023-04-10
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2015-09-20
    • 2018-03-20
    • 2021-11-02
    相关资源
    最近更新 更多