0

投稿内からコメントの数を数えようとしており(ある種のブログを作成しようとしています)、投稿のタイトルに表示しています。ここにいくつかのコードがあります。

私のモデル:

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

エラーを星でマークしました。「値を null にすることはできません」というエラーが表示されます。

これを理解するのを手伝ってくれる人はいますか?

よろしくお願いいたします。

4

1 に答える 1

3

View in foreach ループでは、投稿にアクセスしているので、次のようにします。

@post.Comments.Count

また、コントローラーのクエリはコメントを遅延ロードする可能性があり、ビューに送信するときに実際には含まれないため、コメントを熱心にロードすると思います。

var dbPosts = db.Posts.Include("Comments").OrderByDescending(p => p.ID).ToList(); 
于 2013-04-09T17:27:22.907 に答える