C# Orderby在列表上升序错误asp.net
大家好,我正在构建一个允许用户提交帖子的应用程序,我正在尝试按升序在列表中使用orderby,但我遇到了这个错误 错误 传递到字典的模型项的类型为“System.Linq.OrderedEnumerable”2[myproject.Models.NewsPostVM,System.Nullable'1[System.Int32]],但此字典需要类型为“System.Collections.Generic.List'1[myproject.Models.NewsPostVM]”的模型项。 控制器 看法C# Orderby在列表上升序错误asp.net,c#,asp.net,linq,model-view-controller,ef-code-first,C#,Asp.net,Linq,Model View Controller,Ef Code First,大家好,我正在构建一个允许用户提交帖子的应用程序,我正在尝试按升序在列表中使用orderby,但我遇到了这个错误 错误 传递到字典的模型项的类型为“System.Linq.OrderedEnumerable”2[myproject.Models.NewsPostVM,System.Nullable'1[System.Int32]],但此字典需要类型为“System.Collections.Generic.List'1[myproject.Models.NewsPostVM]”的模型项。 控制器
@型号列表
@foreach(模型中的var p)
{
@p、 标题
@p、 身体
@foreach(p.Images中的var图像)
{
}
@p、 日期
}
在分配模型数据之前,必须调用模型数据上的列表
:
var post= posts.OrderBy(m => m.ID).ToList();
return View(post);
或者,您可以更改视图的模型以接受IEnumerable(如果您只是使用foreach,IEnumerable是可以的):
@model IEnumerable
因为您使用“var”作为变量类型,编译器选择IOrderedEnumerable作为最合适的类型。但是,您的视图需要一个列表
使用“ToList”强制将结果设置为列表:
var post= posts.OrderBy(m => m.ID).ToList();
通过指定以下变量类型,可以避免这种意外行为:
IList<NewsPostVM> posts = posts.OrderBy(m => m.ID).ToList();
IList posts=posts.OrderBy(m=>m.ID.ToList();
更改模型定义以接受IEnumerable@model IEnumerable
或添加ToList()
以从控制器返回如下列表:var post=posts.OrderBy(m=>m.ID).ToList()
Usevar posts=db.NewsPosts.OrderByx=>x.ID)
和deletevar post=posts.OrderBy(m=>m.ID)代码>-答案更有效(但不要使用var
,这是显而易见的)谢谢你,你已经解决了我的问题,当我can@ARandomUserNamedChuck很好,如果jsu无法将IEnumerable分配给列表,则第二行将无法编译。如果您是正确的。也将其更改为使用.ToList()。这是一个稍微多一点的代码,但可以确保新用户不会“神奇地”改变变量类型。
@model IEnumerable<MyProject.Models.NewsPostVM>
var post= posts.OrderBy(m => m.ID).ToList();
IList<NewsPostVM> posts = posts.OrderBy(m => m.ID).ToList();