Na głównej stronie projektu chcę wyświetlić podsumowanie użytkownikowi związane z jego zadaniami. Mam taki kod, spełnia on swoje zadanie ale według mnie nie wygląda on dobrze. Jak można go poprawić? Będę wdzięczny za jakieś wzorce, techniki itp. Wydaje mi się, że coś w Where
i Select
trzeba zmienić bo za dużo jest duplikacji. Nie wiem czy ToList()
dobrze użyłem, teraz będą 4 zapytania do bazy danych, można to jakoś zoptymalizować?
var summaryViewModel = new SummaryViewModel
{
TodayTasks = _context.Tasks
.Where(t => t.DueDate.Date == DateTime.Today.Date &&
t.IsCompleted == false &&
t.UserId == userId)
.OrderByDescending(t => t.Priority)
.Take(5)
.Select(t => new TaskViewModel
{
Id = t.Id,
Name = t.Name,
DueDate = t.DueDate.ToLongDateString(),
Priority = t.Priority.ToString(),
Category = t.Category.Name
})
.ToList(),
TomorrowTasks = _context.Tasks
.Where(t => t.DueDate.Date == DateTime.Today.AddDays(1).Date &&
t.IsCompleted == false &&
t.UserId == userId)
.OrderByDescending(t => t.Priority)
.Take(5)
.Select(t => new TaskViewModel
{
Id = t.Id,
Name = t.Name,
DueDate = t.DueDate.ToLongDateString(),
Priority = t.Priority.ToString(),
Category = t.Category.Name
})
.ToList(),
LaterTasks = _context.Tasks
.Where(t => t.DueDate.Date > DateTime.Today.AddDays(1).Date &&
t.IsCompleted == false &&
t.UserId == userId)
.OrderBy(t => t.DueDate.Date)
.ThenByDescending(t => t.Priority)
.Take(5)
.Select(t => new TaskViewModel
{
Id = t.Id,
Name = t.Name,
DueDate = t.DueDate.ToLongDateString(),
Priority = t.Priority.ToString(),
Category = t.Category.Name
})
.ToList(),
RecentlyCompletedTasks = _context.Tasks
.Where(t => t.IsCompleted &&
t.UserId == userId)
.OrderBy(t => t.CompletedAt.Value)
.Take(5)
.Select(t => new TaskViewModel
{
Id = t.Id,
Name = t.Name,
DueDate = t.DueDate.ToLongDateString(),
Priority = t.Priority.ToString(),
Category = t.Category.Name
})
.ToList()
};