Сортировка последних новостей MVC - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь отсортировать что-то по дате публикации, где только четыре из них являются единственными, которые следует увидеть.

Я делаю это через MVC с таблицей базы данных SQL, но по какой-то причине это работает не так, как должно, и вместо этого показывает весь список:

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 голосов
/ 13 сентября 2018

В качестве первого вопроса нам нужно изучить порядок запросов в этой строке:

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'

Поскольку вы хотите показать 4 верхние записи, упорядоченные по последнему значению Dato, просто удалите все ненужные экземпляры списка, такие как List<tblVidstedu> Vidsteduliste = new List<tblVidstedu>();, и верните эти записи непосредственно из действия контроллера:

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

return View(ViewModel);

Затем вы можете использовать цикл foreach для отображения записей, хранящихся в списке Vidstedu на странице просмотра.

...