0

だから私は自作のフォーラム(ASP.net MVC4)に取り組んでおり、現在すべてのフォーラムを表示しています。コントローラーで次の簡単なクエリを実行します。

return View(db.Forums.ToList());

しかし、今はトップポストも含めたいと思っています。(フォーラム エンティティには Post のコレクションがあり、Post には Date があります。それで並べ替えてから、take(1) を実行します)。

私は次のようなことを試みます:

return View(db.Forums.Include(z=>z.Posts.OrderBy(x=>x.Date).Take(1)).ToList());

次に、エラーが発生します。

インクルード パス式は、型で定義されたナビゲーション プロパティを参照する必要があります。参照ナビゲーション プロパティにはドット パスを使用し、コレクション ナビゲーション プロパティには Select 演算子を使用します。パラメータ名: パス

PS: これが現在のビューです

@model IEnumerable<MyProject.Data.Forum>

@{
    ViewBag.Title = "Forum Index";
}

<h2>Forums</h2>

<table class="Forum">
    <tbody>
    <tr>Main forums</tr>
    @foreach (var item in Model)
    {
        <tr class="ForumItem">
            <td><a href="Index?id=@item.Id">X</a></td>
            <td><p><a href="Index?id=@item.Id">@item.Name</a></p><span>@item.Description</span></td>
            <td>@item.PostCount</td>
            @foreach(var post in item.Posts)
            {
                <td>@post.Title</td>
            }
        </tr>
    }
    </tbody>
</table>

誰でもこれに対する解決策を知っていますか?

4

2 に答える 2

2

あなたはこのようにそれを行うことができます:

return View(db.Forums.Select(f => new {
      Forum = f, 
      FirstPost = f.Posts.OrderBy(x=>x.Date).First() }
   ).ToList()
); 
于 2012-10-11T11:43:16.853 に答える
1

「...インクルード パス式はナビゲーション プロパティを参照する必要があります...」というエラーは、z.Posts.OrderBy がナビゲーション プロパティではないことを訴えていると思います。

以下のページを参照してください。

Entity Framework、MVC 3、LINQ To Entities の OrderBy

于 2012-10-11T11:39:08.163 に答える