【发布时间】:2017-06-20 19:09:27
【问题描述】:
大家好,我正在构建一个允许用户提交帖子的应用程序,我试图在列表中按升序使用 orderby,但我收到此错误
错误
传入字典的模型项的类型是'System.Linq.OrderedEnumerable'2[myproject.Models.NewsPostVM,System.Nullable'1[System.Int32]]',但是这个字典需要一个类型的模型项'System.Collections.Generic.List'1 [myproject.Models.NewsPostVM]'。 控制器
public ActionResult News()
{
var posts = db.NewsPosts.Select(d => new NewsPostVM()
{
ID = d.ID,
Heading = d.Heading,
Body = d.Body,
Images = d.Images.Select(i => new NewsImageVM()
{
Path = i.Path,
FileName = i.DisplayName
}).ToList()
}).ToList();
var post= posts.OrderBy(m => m.ID);
return View(post);
}
查看
@model List<MyProject.Models.NewsPostVM>
@foreach (var p in Model)
{
<div class="w3-container w3-center">
<h5><b>@p.Heading</b></h5>
<p>@p.Body</p>
@foreach (var image in p.Images)
{
<img class="img-thumbnail" width="150" height="150" src="~/Images/@image.Path" />
}
<h6>@p.Date</h6>
</div>
}
【问题讨论】:
-
要么更改您的模型定义以接受 IEnumerable
@model IEnumerable<MyProject.Models.NewsPostVM>或添加ToList()以从您的 控制器 返回一个列表,如下所示:var post= posts.OrderBy(m => m.ID).ToList(); -
使用
var posts = db.NewsPosts.OrderByx => x.ID).Select(d => new NewsPostVM() { ... }).ToList();并删除var post= posts.OrderBy(m => m.ID);- 比答案更有效(但不要使用var,这很明显)
标签: c# asp.net linq model-view-controller ef-code-first