Томский политехнический университет
Опубликован: 23.01.2013 | Доступ: свободный | Студентов: 1158 / 192 | Длительность: 12:09:00
Лекция 8:

Parallel LINQ (PLINQ)

Примеры LINQ - запросов

Работа с простыми массивами данных

В первом примере, используем LINQ-запрос для того, что бы из заданного массива выбрать диапазон чисел с условием, что элемент массива будет больше 1, но меньше 9 включительно:

static void Main(string[] args)
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            
            var nums = from i in numbers
                       where i > 1 && i <= 9
                       select i;

            foreach (var n in nums)
            {
                Console.Write(n + " ");
            }
            Console.ReadLine();
        } 
 Результат выполнения LINQ - запроса по выборке чисел

увеличить изображение
Рис. 11.2. Результат выполнения LINQ - запроса по выборке чисел

Рассмотрим подробнее строчку с LINQ-запросом:

var nums = from i in numbers
                       where i > 1 && i <= 9
                       select i;

nums - это неявный тип переменной, которой присваивается результат выполнения LINQ -запроса; i - это переменная диапазона; numbers - источник данных.

Этот же LINQ - запрос (как и любой другой) можно реализовать с помощью лямбда-выражения:

var nums = numbers.Where(i => i > 1 && i <= 9);

Также, в фрагменте кода с оператором select, можно вызывать функцию или реализованный ранее метод, и тогда переменной nums - будет присвоен результат выполнения функции или метода. Как показано в примере ниже переменная nums будет содержать результаты работы функции Math.Sqrt которая вычисляет квадратный корень из массива numbers:

var nums = from i in numbers
                       where i > 1 && i <= 9
                       select Math.Sqrt(i);
 Результат выполнения LINQ - запроса  с использованием функции Math.Sqrt()

увеличить изображение
Рис. 11.3. Результат выполнения LINQ - запроса с использованием функции Math.Sqrt()

Работа с массивами и коллекциями классов

Также, с помощью LINQ - запросов можно обращаться к другим источникам данных, таким как типизированные списки List<T>, объекты, которых содержат простые экземпляры классов. В нашем случае - это объекты класса Employee:

public  class Employee
{
public int id {get;set;}
public string firstname { get; set; }
public string lastname {get;set;}
public double salary {get;set;}

       public static List<Employee> GetEmployees()
         {
             List<Employee> emp = new List<Employee>
           {
           
            new Employee { id = 1, firstname = "Иван", lastname = "Иванов",salary=3500 },
            new Employee { id = 2, firstname = "Сергей", lastname = "Сидоров", salary = 1710 },
            new Employee { id = 3, firstname = "Алексей", lastname = "Петренко", salary = 2115.3 },
            new Employee { id = 4, firstname = "Александр", lastname = "Иванов", salary = 1411.1 }
            };
            return (emp);
        }
}
        static void Main(string[] args)
        {
            var employees = Employee.GetEmployees();


            var employee = from i in employees
                      where i.lastname=="Иванов"
                      select i;

            foreach (var n in employee)
            {
                Console.WriteLine(n.id + " " + n.firstname +" "+n.lastname +" "+ n.salary);
           }
            Console.ReadLine();
        } 

В методе Main() получаем список сотрудников с помощью метода GetEmployees() который возвращает список сотрудников, содержащийся в типизированной коллекции List<Employee>. LINQ-запрос получает список сотрудников, у которых фамилия "Иванов" (Рис. 11.4)

 Результат выполнения LINQ - запроса  с использованием объектов класса Employee

увеличить изображение
Рис. 11.4. Результат выполнения LINQ - запроса с использованием объектов класса Employee
Владимир Каширин
Владимир Каширин

Вопрос по Курсу: "Параллельное программирование с использованием MS VisualStudia 2010".

При компиляции Самостоятельного задания (одновременная отрисовка прямоугольников, эллипсов и выдача в текст-бокс случайного числа) среда предупреждает: suspend - устаревшая команда; примените monitor, mutex и т.п.

Создаётся впечатление, что Задание создано в более поздней среде, чем VS 2010.