我正在尝试根据其“发布”日期对某些内容进行排序,在该日期中,只有四个是最新的。
我正在通过带有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);
}
答案 0 :(得分:0)
作为第一个问题,我们需要检查这一行的查询顺序:
Vidsteduliste = db.Vidstedu.OrderByDescending(v => v.Dato).Take(4).FirstOrDefault();
OrderByDescending
来自Dato
属性Take
从有序记录中选择前4条记录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
列表中的记录。