# [Lab 13. Основы LINQ](https://github.com/kolei/OAP/blob/master/articles/t6_linq.md) ### Тема "Гостиничный бизнес" **исходный массив** ``` string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"}; ``` **список для результатов** ``` var selectedPlace = new List(); foreach(string s in place) { // ищем слова начинающиеся на букву "А" if (s.ToUpper().StartsWith("А")) selectedPlace.Add(s); } ``` **сортируем получившийся список** ``` selectedPlace.Sort(); foreach (string s in selectedPlace) Console.WriteLine(s); ``` ``` Вывод: Апартаменты ``` ``` string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"}; var selectedPlace = from t in place where t.ToUpper().StartsWith("Н") //фильтрация по критерию orderby t // упорядочиваем по возрастанию select t; // выбираем объект foreach (string s in selectedPlace) Console.WriteLine(s); ``` ``` Вывод: Обычный номер ``` **Методы расширения LINQ** ``` string[] place = {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"}; var selectedPlace = place .Where(t=>t.ToUpper().StartsWith("Д")) .OrderBy(t => t); foreach (string s in selectedPlace) Console.WriteLine(s); ``` ``` Вывод: Дешевый номер ``` **Выборка сложных объектов** ``` using System; List users = new List { new User { Name="Максим", Age=17, }, new User { Name="Дмитрий", Age=18, }, new User { Name="Милана", Age=16, }, new User { Name="Георгий", Age=22, } }; var selectedUsers = users.Where(u => u.Age > 16); foreach (User user in selectedUsers) Console.WriteLine($"{user.Name} - {user.Age}"); public class User { public string Name { get; set; } public int Age { get; set; } } ``` ``` Вывод: Максим - 17 Дмитрий - 18 Георгий - 22 ``` **Проекция** ``` using System; List users = new List { new User { Name="Максим", Age=17, }, new User { Name="Дмитрий", Age=18, }, new User { Name="Милана", Age=16, }, new User { Name="Георгий", Age=22, } }; var items = users.Select(u => new { FirstName = u.Name, DateOfBirth = DateTime.Now.Year - u.Age }); foreach (var n in items) Console.WriteLine($"{n.FirstName} - {n.DateOfBirth}"); public class User { public string Name { get; set; } public int Age { get; set; } } ``` ``` Вывод: Максим - 2007 Дмитрий - 2006 Милана - 2008 Георгий - 2002 ``` **Выборка из нескольких источников** ``` using System; List users = new List() { new User { Name="Максим", Age=17, }, new User { Name="Дмитрий", Age=18, }, new User { Name="Милана", Age=16, }, new User { Name="Георгий", Age=22, }, }; List places = new List() { {"Дешевый номер", "Обычный номер", "Дорогой номер", "Номер люкс", "Апартаменты"}; new Place { Mesto = "Дешевый номер", Price = 999, }, new Place { Mesto = "Обычный номер", Price = 5000, }, new Place { Mesto = "Дорогой номер", Price = 20000, }, new Place { Mesto = "Номер люкс", Price = 100000, }, new Place { Mesto = "Апартаменты", Price = 500000, }, }; var people = from user in users from place in places select new { Name = user.Name, Place = place.Mesto }; foreach (var p in people) Console.WriteLine($"{p.Name} - {p.Place}"); public class User { public string Name { get; set; } public int Age { get; set; } } public class Place { public string Mesto { get; set; } public int Price { get; set; } } ``` ``` Вывод: Максим - Дешевый номер Максим - Обычный номер Максим - Дорогой номер Максим - Номер люкс Максим - Апартаменты Дмитрий - Дешевый номер Дмитрий - Обычный номер Дмитрий - Дорогой номер Дмитрий - Номер люкс Дмитрий - Апартаменты Милана - Дешевый номер Милана - Обычный номер Милана - Дорогой номер Милана - Номер люкс Милана - Апартаменты Георгий - Дешевый номер Георгий - Обычный номер Георгий - Дорогой номер Георгий - Номер люкс Георгий - Апартаменты ``` **Сортировка** ``` using System; List users = new List() { new User { Name="Максим", Age=17, }, new User { Name="Дмитрий", Age=18, }, new User { Name="Милана", Age=16, }, new User { Name="Георгий", Age=22, }, }; List places = new List() { new Place { Mesto = "Дешевый номер", Price = 999, }, new Place { Mesto = "Обычный номер", Price = 5000, }, new Place { Mesto = "Дорогой номер", Price = 20000, }, new Place { Mesto = "Номер люкс", Price = 100000, }, new Place { Mesto = "Апартаменты", Price = 500000, }, }; var sortedUsers = users.OrderBy(u => u.Name); foreach (User u in sortedUsers) Console.WriteLine(u.Name); public class User { public string Name { get; set; } public int Age { get; set; } } public class Place { public string Mesto { get; set; } public int Price { get; set; } } ``` ``` Вывод: Дмитрий Максим Милана Георгий ``` **Множественные критерии сортировки** ``` using System; List users = new List() { new User { Name="Максим", Age=17, }, new User { Name="Дмитрий", Age=18, }, new User { Name="Георгий", Age=22, }, new User { Name="Милана", Age=16, }, }; List places = new List() { new Place { Mesto = "Дешевый номер", Price = 999, }, new Place { Mesto = "Обычный номер", Price = 5000, }, new Place { Mesto = "Дорогой номер", Price = 20000, }, new Place { Mesto = "Номер люкс", Price = 100000, }, new Place { Mesto = "Апартаменты", Price = 500000, }, }; var result = users .OrderBy(u => u.Name) .ThenBy(u => u.Age); foreach (User u in result) Console.WriteLine($"{u.Name} - {u.Age}"); public class User { public string Name { get; set; } public int Age { get; set; } } public class Place { public string Mesto { get; set; } public int Price { get; set; } } ``` ``` Вывод: Дмитрий - 18 Максим - 17 Милана - 16 Георгий - 22 ```