using System; using System.Collections.Generic; using System.Linq; using AvaloniaApplication1.Models; using Microsoft.EntityFrameworkCore; using ReactiveUI; namespace AvaloniaApplication1.ViewModels { public class CoursesListViewModel : ReactiveObject { public static ScoolContext DB = new ScoolContext(); private List? courses; public List? Courses { get => courses; set => this.RaiseAndSetIfChanged(ref courses, value); } public CoursesListViewModel() { Courses = DB.Courses.Include(x=>x.TeachersCourses).ToList(); } public static List OrderNameOrHours => new List() {"Без сортировки", "По имени А-Я", "По имени Я-А", "По количеству часов (по возрастанию)", "По количеству часов (по убыванию)" }; private string selectedNameOrHour = OrderNameOrHours[0]; public string SelectedNameOrHour { get => selectedNameOrHour; set { selectedNameOrHour = value; Filter(); } } public static List FilterByHours => new List() { "Без фильтра", "50 часов или меньше", "от 50 до 100 часов", "более 100 часов" }; private string selectedFilter = FilterByHours[0]; public string SelectedFilter { get => selectedFilter; set { selectedFilter = value; Filter(); } } private string nameOrHoursFind; public string NameOrHoursFind { get => nameOrHoursFind; set { nameOrHoursFind = value; Filter(); } } public void Filter() { Courses = DB.Courses.Include(x => x.TeachersCourses).ToList(); if(SelectedNameOrHour != "Без сортировки") { switch(SelectedNameOrHour) { case "По имени А-Я": Courses = Courses.OrderBy(x=>x.Course1).ToList(); break; case "По имени Я-А": Courses = Courses.OrderByDescending(x => x.Course1).ToList(); break; case "По количеству часов (по возрастанию)": Courses = Courses.OrderBy(x => x.HoursCount).ToList(); break; case "По количеству часов (по убыванию)": Courses = Courses.OrderByDescending(x => x.HoursCount).ToList(); break; } } if (SelectedFilter != "Без фильтра") { switch (SelectedNameOrHour) { case "50 часов или меньше": Courses = Courses.Where(x => x.HoursCount <= 50).ToList(); break; case "от 50 до 100 часов": Courses = Courses.Where(x => x.HoursCount > 50 && x.HoursCount <= 100).ToList(); break; case "более 100 часов": Courses = Courses.Where(x => x.HoursCount > 100).ToList(); break; } } if(NameOrHoursFind != null && NameOrHoursFind != "") { Courses = Courses.Where(x=>x.Course1.ToLower().Contains(NameOrHoursFind.ToLower()) || NameOrHoursFind == Convert.ToString(x.HoursCount)).ToList(); } } } }