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 不是导航属性。

请参考以下页面。

实体框架、MVC 3、LINQ To 实体中的 OrderBy

于 2012-10-11T11:39:08.163 回答