|
Вопрос по Курсу: "Параллельное программирование с использованием MS VisualStudia 2010". При компиляции Самостоятельного задания (одновременная отрисовка прямоугольников, эллипсов и выдача в текст-бокс случайного числа) среда предупреждает: suspend - устаревшая команда; примените monitor, mutex и т.п. Создаётся впечатление, что Задание создано в более поздней среде, чем VS 2010. |
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-запросом:
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);увеличить изображение
Рис. 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)
увеличить изображение
Рис. 11.4. Результат выполнения LINQ - запроса с использованием объектов класса Employee


