# Фильтрация данных ("University") ₊ ⊹ ## Фильтрация по словарю ``` using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; namespace University { public partial class MainWindow : Window { private List students; private Dictionary> filters; public MainWindow() { InitializeComponent(); // Инициализируем список студентов и словарь фильтров InitializeData(); // Заполняем комбобокс с фильтрами foreach (var filter in filters.Keys) { FilterComboBox.Items.Add(filter); } // Отображаем всех студентов в listview UpdateStudentList(students); } private void InitializeData() { // Создаем список студентов students = new List { new Student { Name = "Хэй Вэнь", Course = 3, Nationality = "Китаец", Age = 22 }, new Student { Name = "Эдвард Каллен", Course = 1, Nationality = "Американец", Age = 20 }, new Student { Name = "Джейк Ли", Course = 1, Nationality = "Китаец", Age = 19 }, new Student { Name = "Семен Хомяк", Course = 4, Nationality = "Русский", Age = 23 }, new Student { Name = "Эндрю Уилсон", Course = 3, Nationality = "Американец", Age = 21 }, new Student { Name = "Ариадна Санчес", Course = 2, Nationality = "Испанец", Age = 20 } }; // Создаем словарь фильтров filters = new Dictionary> { { "Все", s => true }, { "Первый курс", s => s.Course == 1 }, { "Второй курс", s => s.Course == 2 }, { "Третий курс", s => s.Course == 3 }, { "Четвертый курс", s => s.Course == 4 }, { "Русские", s => s.Nationality == "Русский" }, { "Китайцы", s => s.Nationality == "Китаец" }, { "Американцы", s => s.Nationality == "Американец" }, { "Испанцы", s => s.Nationality == "Испанец" }, { "Возраст 19-20", s => s.Age >= 19 && s.Age <= 20 }, { "Возраст 21-23", s => s.Age >= 21 && s.Age <= 22 } }; } private void FilterComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { string selectedFilter = (string)FilterComboBox.SelectedItem; if (filters.TryGetValue(selectedFilter, out Func filterFunc)) { List filteredStudents = students.Where(filterFunc).ToList(); UpdateStudentList(filteredStudents); } } private void UpdateStudentList(List studentsToDisplay) { StudentListView.ItemsSource = studentsToDisplay; } } class Student { public string Name { get; set; } public int Course { get; set; } public string Nationality { get; set; } public int Age { get; set; } } } ``` ``` ``` ![](./img/Снимок%20экрана%202024-04-26%20214856.png) ![](./img/Снимок%20экрана%202024-04-26%20221247.png) ![](./img/Снимок%20экрана%202024-04-26%20215034.png) ## Фильтрация по условию ``` using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; namespace University { public partial class MainWindow : Window { private List students; public MainWindow() { InitializeComponent(); // Инициализируем список студентов InitializeData(); // Заполняем комбобокс с фильтрами FilterComboBox.Items.Add("Все"); FilterComboBox.Items.Add("Первый курс"); FilterComboBox.Items.Add("Китайцы"); FilterComboBox.Items.Add("Возраст 19-21"); FilterComboBox.SelectedIndex = 0; // Отображаем всех студентов в listview UpdateStudentList(students); } private void InitializeData() { // Создаем список студентов students = new List { new Student { Name = "Хэй Вэнь", Course = 3, Nationality = "Китаец", Age = 22 }, new Student { Name = "Эдвард Каллен", Course = 1, Nationality = "Американец", Age = 19 }, new Student { Name = "Джейк Ли", Course = 1, Nationality = "Китаец", Age = 19 }, new Student { Name = "Семен Хомяк", Course = 4, Nationality = "Русский", Age = 23 }, new Student { Name = "Эндрю Уилсон", Course = 2, Nationality = "Американец", Age = 21 }, new Student { Name = "Мария Гонсалес", Course = 3, Nationality = "Испанец", Age = 20 } }; } private void FilterComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { string selectedFilter = (string)FilterComboBox.SelectedItem; List filteredStudents = new List(); switch (selectedFilter) { case "Все": filteredStudents = students; break; case "Первый курс": filteredStudents = students.Where(s => s.Course == 1).ToList(); break; case "Китайцы": filteredStudents = students.Where(s => s.Nationality == "Китаец").ToList(); break; case "Возраст 19-21": filteredStudents = students.Where(s => s.Age >= 19 && s.Age <= 21).ToList(); break; } UpdateStudentList(filteredStudents); } private void UpdateStudentList(List studentsToDisplay) { StudentListView.ItemsSource = studentsToDisplay; } } class Student { public string Name { get; set; } public int Course { get; set; } public string Nationality { get; set; } public int Age { get; set; } } } ``` ``` ``` ![](./img/Снимок%20экрана%202024-04-26%20220646.png) ![](./img/Снимок%20экрана%202024-04-26%20220712.png)