所以我正在制作一个自制论坛(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>
任何人都知道解决方案吗?
答案 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不是导航属性。
请参阅以下页面。