Основы LINQ
Автор: David Chaikovsky • Май 21, 2023 • Лабораторная работа • 1,500 Слов (6 Страниц) • 169 Просмотры
Чайковский Д.Р. 20ПИ
Лабораторная работа № 5
Основы LINQ Часть 3
Проверка наличия и получение элементов
Класс Student, который будет представлять студентов:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Grade { get; set; }
public bool IsGraduated { get; set; }
}
Затем, создадим набор данных об студентах:
var students = new List<Student>
{
new Student { Id = 1, Name = "John", Age = 20, Grade = "A IsGraduated = false },
new Student { Id = 2, Name = "Mary", Age = 19, Grade = "B", IsGraduated = false },
new Student { Id = 3, Name = "Peter", Age = 22, = "A", IsGraduated = false },
new Student { Id = 4, Name = "Jane", Age = 21, Grade = "C", IsGraduated = false },
new Student { Id = , Name = "David", Age = 20, Grade = "A", IsGraduated = false },
new Student { Id = 6, Name = "Sarah", Age = 19, Grade = "B", IsGraduated = false },
new Student { Id = 7, Name = "Tom", Age = 22, Grade = "A", IsGraduated = false },
new Student { Id = 8, Name = "Emily", Age = 21, Grade = "C", IsGraduated = false }
};
1) Отложенное выполнение запросов:
Отложенное выполнение запросов - это механизм, который позволяет отложить выполнение запроса до тех пор, пока не будет запрошен результат. Это позволяет оптимизировать производительность и уменьшить нагрузку на сервер. В C# мы можем использовать методы LINQ, такие как Where, Select, OrderBy и другие, для создания запросов, которые будут выполнены только при запросе результата. Напр:
var query = students.Where(s => s.Age > 18).OrderBy(s => s.Name);
2) Делегаты в запросах LINQ:
Делегаты - это объекты, которые содержат ссылку на метод. В C# мы можем использовать делегаты в запросах LINQ для определения условий фильтрации, сортировки и других операций. Например:
Func<Student, bool> filter = s => s.Age > 18 && s.Grade == "A";
var query = students.Where(filter);
3) Метод AsParallel:
Метод AsParallel - это метод, который позволяет выполнять запросы LINQ параллельно. Это может ускорить выполнение запросов на многопроцессорных системах. Например:
var query = students.AsParallel().Where(s => s.Age > 18 && s.Grade == "A");
4) Метод ForAll:
Метод ForAll - это метод, который позволяет выполнять действия над каждым элементом коллекции параллельно. Например:
students.AsParallel().Where(s => s.Age > 18 && s.Grade == "A").ForAll(s => s.IsGraduated = true);
5) Метод AsOrdered:
Метод AsOrdered - это метод, который позволяет сохранять порядок элементов при выполнении параллельных запросов. Например:
var query = students.AsParallel().AsOrdered().Where(s => s.Age > 18 && s.Grade == "A");
6) Обработка ошибок:
При выполнении запросов могут возникать ошибки, такие как отсутствие подключения к базе данных или неправильный синтаксис запроса. В C# мы можем использовать конструкцию try-catch для обработки ошибок. Например:
try
{
var query = students.Where(s => s.Age > 18 && s.Grade "A");
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
7) Прерывание параллельной операции:
Иногда может возникнуть необходимость прервать выполнение параллельной операции. В C# мы можем использовать методы CancellationTokenSource и CancellationToken для этого. Например:
var cts = new CancellationTokenSource();
var token = cts.Token;
Task.Factory.StartNew(() =>
{
students.AsParallel().WithCancellation(token).Where(s => s.Age > 18 && s.Grade == "A").ForAll(s => s.IsGraduated = true);
}, token);
cts.Cancel();
...