排序最新新闻MVC

时间:2018-09-10 17:50:11

标签: asp.net-mvc foreach sql-order-by

我正在尝试根据其“发布”日期对某些内容进行排序,在该日期中,只有四个是最新的。

我正在通过带有SQL数据库表的MVC进行此操作,但由于某种原因,它无法正常工作,而是显示整个列表:

DataBaseClasses:

public class tblVidstedu
{
    public int Id { get; set; }
    public string Overskrift { get; set; }
    public string Tekst { get; set; }
    public DateTime Dato { get; set; }
}

数据上下文:

public DbSet<DataBases.DataBaseClasses.tblVidstedu> Vidstedu { get; set; }

HomeController:

    public ActionResult VidsteDu()
    {
        var ViewModel = new Prøveeksamen.Models.InformationModel();

        // skal skrives på alle viewmodels
        ViewModel.Kontakt = db.Kontakt.ToList();
        List<tblKontakt> Kontakt = new List<tblKontakt>();

        ViewModel.Vidstedu = db.Vidstedu.ToList();

        List<tblVidstedu> Vidsteduliste = new List<tblVidstedu>();


       // !!!!!!!!! This is the part that i have problems with   !!!!!!!!!!! //
        Vidsteduliste = db.Vidstedu.OrderByDescending(v => v.Dato).Take(4).FirstOrDefault;

        return View(ViewModel);
    }

1 个答案:

答案 0 :(得分:0)

作为第一个问题,我们需要检查这一行的查询顺序:

Vidsteduliste = db.Vidstedu.OrderByDescending(v => v.Dato).Take(4).FirstOrDefault();
  1. OrderByDescending来自Dato属性
  2. Take从有序记录中选择前4条记录
  3. FirstOrDefault从其余4条记录中提取第一项,并在结果集中返回一条记录(而不是您想要的4条记录)

第二个问题是您不是在返回上面的结果集,而是实际上在返回所有记录,因为该return语句未设置为返回Vidsteduliste

return View(ViewModel);

之前ViewModel分配了以下行:

ViewModel.Vidstedu = db.Vidstedu.ToList(); // returns all records from 'Vidstedu'

由于您要显示按最近的Dato值排序的前4条记录,因此只需删除所有不必要的列表实例,例如List<tblVidstedu> Vidsteduliste = new List<tblVidstedu>();,然后直接从控制器操作中返回这些记录:

ViewModel.Vidstedu = db.Vidstedu.OrderByDescending(v => v.Dato).Take(4).ToList();

return View(ViewModel);

然后,您可以使用foreach循环在视图页面上显示存储在Vidstedu列表中的记录。