获取每个论坛的最新帖子

时间:2012-10-11 11:12:01

标签: c# asp.net linq entity-framework lambda

所以我正在制作一个自制论坛(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());

然后我收到错误:

  

Include路径表达式必须引用导航属性   在类型上定义。使用虚线路径进行参考导航   属性和集合导航的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>

任何人都知道解决方案吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

return View(db.Forums.Select(f => new {
      Forum = f, 
      FirstPost = f.Posts.OrderBy(x=>x.Date).First() }
   ).ToList()
); 

答案 1 :(得分:1)

我认为错误“...包含路径表达式必须引用导航属性...”抱怨z.Posts.OrderBy不是导航属性。

请参阅以下页面。

Entity Framework, MVC 3, OrderBy in LINQ To Entities