Главная страница
Навигация по странице:

  • Краткие теоретические сведения

  • Grajdanin

  • Контрольные вопросы

  • Лабораторная работа № 2. Краткие теоретические сведения Пусть имеется список граждан из лабораторной работы 1 Организация хранения объектов в списке на языке C# с возможностью редактирования


    Скачать 92 Kb.
    НазваниеКраткие теоретические сведения Пусть имеется список граждан из лабораторной работы 1 Организация хранения объектов в списке на языке C# с возможностью редактирования
    Дата28.06.2022
    Размер92 Kb.
    Формат файлаdoc
    Имя файлаЛабораторная работа № 2.doc
    ТипЛабораторная работа
    #618167

    Лабораторная работа 2

    Использование технологии LINQ для работы с коллекцией экземпляров класса

    Цель работы: Исследовать особенности использования технологии LINQ для работы с коллекцией экземпляров класса.

    Краткие теоретические сведения

    Пусть имеется список граждан из лабораторной работы 1 «Организация хранения объектов в списке на языке C# с возможностью редактирования»

    List list = new List();.

    Рассмотрим примеры использования технологии LINQ на этом списке.

    Напишем запрос к нашей коллекции, возвращающий клиентов, являющихся гражданами России.

    var results = list.Where(g.Country == “Russia”);

    Выше определенная запись означает: для каждого элемента, условно названного g, списка list, для которого country == “Russia” выбирается целиком элемент g. Иначе говоря, выбираются объекты g класса Grajdanin из списка list, для которых Country == “Russia”.

    Список можно отсортировать по фамилии

    var results = list.Where(g=>g.Country == “Russia”).OrderBy(g=>g.Fam);

    Аналогично можно выбрать граждан с фамилией Иванов

    var results = list.Where(g=>g.Fam == “Иванов”);

    Данный список можно вывести в консольном режиме следующим образом (для этого на форму поместите элемент управления Label с именем label1):

    foreach (var c in results)

    Console.WriteLine(c);

    или в Label:

    label1.Text = "";

    foreach (var g in results)

    label1.Text += "\n" + g.ToString();

    Цикл foreach позволяет ввести переменную g, которая будет принимать поочередно все значения из списка results. Список results в свою очередь содержит список граждан России.

    Для отображения списка results в dataGridView необходимо записать следующий код

    BindingSource bindingSource = new BindingSource();

    bindingSource.DataSource = results;

    dataGridView1.AutoGenerateColumns = true;

    dataGridView1.DataSource = bindingSource;

    bindingNavigator1.BindingSource = bindingSource;

    При необходимости выбора только части полей экземпляров класса Grajdanin необходимо использовать метод Select и записать:

    List results = list.Where(g=>g.Country == “Russia”).OrderBy(g=>g.Fam). Select (g=>new {Fam = g.Fam, Nam = g.Nam}).ToList();

    Чтобы показать весь список нужен следующий код:

    BindingSource bindingSource = new BindingSource();

    bindingSource.DataSource = list;

    dataGridView1.AutoGenerateColumns = true;

    dataGridView1.DataSource = bindingSource;

    bindingNavigator1.BindingSource = bindingSource;
    Порядок выполнения работы

    1. Для выполнения нижеперечисленных заданий в качестве основы взять программу из лабораторной работы 1 «Организация хранения объектов в списке на языке C# с возможностью редактирования».

    2. Добавить возможность фильтрации по 2-3 полям (свойствам) с использованием:

    – условия на равенство (числу или другому типу данных) или условия на неравенство;

    – условия на вхождение в диапазон;

    – условия на равенство первого символа строки указанному символу.

    Пользователь должен иметь возможность задавать требуемые значения. Например, необходимо:

    – получить список всех сотрудников с указанной фамилией, введенной с клавиатуры;

    – получить список всех сотрудников с фамилией, начинающейся на указанную букву, введенную с клавиатуры;

    – список всех сотрудников с зарплатой в указанном диапазоне, введенном с клавиатуры и т.д.

    Для выбора Ивановых необходимо записать:

    List results = list.Where(g=>g.Fam==”Иванов”).ToList();

    Для выбора граждан, начинающихся на букву, введенную textBox1 на форме, необходимо записать:

    List results = list.Where(g=>g.Fam[0]==textBox1.Text[0]).ToList();

    Для выбора граждан, начинающихся на несколько букв, введенных в textBox1 на форме, необходимо записать:

    List results = list.Where(g=>g.Fam.Substring(0, textBox1.Text.Length) == textBox1.Text).ToList();

    Затем полученный спиcок нужно привязать к dataGridView1 как это сделано в работе 1:
    BindingSource bindingSource = new BindingSource();

    bindingSource.DataSource = results;

    dataGridView1.AutoGenerateColumns = true;

    dataGridView1.DataSource = bindingSource;

    bindingNavigator1.BindingSource = bindingSource;
    3. Добавить элементы управления для осуществления сортировки элементов списка по различным полям (свойствам) по возрастанию или убыванию (с возможностью указания пользователем). Например, отсортировать список сотрудников по возрастанию зарплаты.

    List results = list.OrderBy(g=>g.Fam).ToList();

    List results = list.OrderByDescending(g=>g.Fam).ToList();
    4. Добавить элементы управления для модификации полей (свойств) на указанное значение в единицах измерения поля или процентах. Поле (свойство) и значение должно выбираться пользователем программы. Например, увеличение зарплаты на 20 % всем сотрудникам, увеличение зарплаты на 30 % всем инженерам, изменения фамилии всех Ивановых на Сидоров и т.д.

    Для изменения значения полей можно использовать метод Select с созданием объектов требуемого класса. Для увеличения зарплаты всех сотрудников на 20%:

    List list = list.Select (g=>new Grajdanin (g.Fam, g.Nam, g.Country, g.Zarp*1.2).ToList();

    или для увеличения зарплаты только россиян:

    List list = list.Select (g=>new Grajdanin (g.Fam, g.Nam, g.Country, (g.Country== «Russia») ? g.Zarp*1.2 : g.Zarp).ToList();

    В последнем выражении используется тернарный оператор

    <условие> ? <выражение, если истина>: <выражение, если ложь>.

    Пример формы приложения приведен на рис. 1.


    Рис. 1. Пример формы приложения

    Контрольные вопросы

    1. Как к списку граждан добавить граждан с именем «Петр» из другого списка?

    2. Как модифицировать для некоторых элементов коллекции одно или несколько полей?

    3. Как создать коллекцию list2 с элементами из коллекции list, к каждому элементу которого будет добавлено или удалено свойство?

    4. Как создать из списка с элементами со свойствами <Фамилия> ,<Имя>, <Отчество> список с элементами со свойствами <ФИО> вида «Фамилия И.О.» и <Пол> вида «м» или «ж»?


    написать администратору сайта