【问题标题】:Orderby Ascending on a list error asp.net [duplicate]Orderby Ascending 列表错误 asp.net [重复]
【发布时间】: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&lt;MyProject.Models.NewsPostVM&gt; 或添加 ToList() 以从您的 控制器 返回一个列表,如下所示:var post= posts.OrderBy(m =&gt; m.ID).ToList();
  • 使用var posts = db.NewsPosts.OrderByx =&gt; x.ID).Select(d =&gt; new NewsPostVM() { ... }).ToList(); 并删除var post= posts.OrderBy(m =&gt; m.ID); - 比答案更有效(但不要使用var,这很明显)

标签: c# asp.net linq model-view-controller ef-code-first


【解决方案1】:

在分配模型数据之前,您必须调用 ToList

var post= posts.OrderBy(m => m.ID).ToList();
return View(post);

或者,您可以将模型更改为您的视图以接受 IEnumerable(如果您只是通过它使用 foreach,则可以使用 IEnumerable):

@model IEnumerable<MyProject.Models.NewsPostVM>

【讨论】:

  • 谢谢,您已经解决了我的问题,我会在可以的时候将其标记为已回答
  • @ARandomUserNamedChuck 欢迎您
【解决方案2】:

因为您使用 'var' 作为变量类型,编译器选择 IOrderedEnumerable 作为最合适的类型。但是,您的视图需要一个列表。

使用 'ToList' 将结果强制为列表:

var post= posts.OrderBy(m => m.ID).ToList();

您可以通过指定变量类型来避免这种意外行为:

IList<NewsPostVM> posts = posts.OrderBy(m => m.ID).ToList();

【讨论】:

  • 您无法将 IEnumerable 分配给 List,您的第二行将无法编译
  • 你是对的。也将其更改为使用 .ToList() 。这是更多的代码,但确保变量类型不会为新用户“神奇地”改变。
猜你喜欢
  • 2016-10-14
  • 1970-01-01
  • 2018-10-24
  • 2016-07-02
  • 2014-08-26
  • 2016-05-29
  • 1970-01-01
  • 2022-01-16
  • 2021-09-27
相关资源
最近更新 更多