# LINQ ## Основы LINQ ## 1 ```js // исходный массив 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); ``` ### Вывод: ```js Бульвар ``` ## 2 ```js string[] place = {"Йолка", "Набережная", "Бульвар", "Шарага", "Кб"}; var selectedPlace = from t in place where t.ToUpper().StartsWith("Н") //фильтрация по критерию orderby t // упорядочиваем по возрастанию select t; // выбираем объект foreach (string s in selectedPlace) Console.WriteLine(s); ``` ### Вывод: ```js Набережная ``` # Методы расширения LINQ ```js string[] place = { "Йолка", "Набережная", "Бульвар", "Шарага", "Кб" }; var selectedPlace = place .Where(t=>t.ToUpper().StartsWith("Й")) .OrderBy(t => t); foreach (string s in selectedPlace) Console.WriteLine(s); ``` ### Вывод: ```js Йолка ``` # Выборка сложных объектов ```js 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; } } ``` ### Вывод: ```js Малыш - 17 Даша - 18 Фрай - 22 ``` # Проекция ```js 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; } } ``` ### Вывод: ```js Малыш - 2007 Даша - 2006 Милана - 2008 Фрай - 2002 ``` # Выборка из нескольких источников ```js 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 = 3999, }, new Place { Mesto = "набережная", Price = 199, }, new Place { Mesto = "бульвар", Price = 598, }, new Place { Mesto = "шарага", Price = 10, }, new Place { Mesto = "КБ", Price = 9999, }, }; 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; } } ``` ### Вывод: ```js Малыш - Йолка Малыш - набережная Малыш - бульвар Малыш - шарага Малыш - КБ Даша - Йолка Даша - набережная Даша - бульвар Даша - шарага Даша - КБ Милана - Йолка Милана - набережная Милана - бульвар Милана - шарага Милана - КБ Фрай - Йолка Фрай - набережная Фрай - бульвар Фрай - шарага Фрай - КБ ``` # Сортировка ```js 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 = 3999, }, new Place { Mesto = "набережная", Price = 199, }, new Place { Mesto = "бульвар", Price = 598, }, new Place { Mesto = "шарага", Price = 10, }, new Place { Mesto = "КБ", Price = 9999, }, }; 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; } } ``` ### Вывод: ```js Даша Малыш Милана Фрай ``` # Множественные критерии сортировки ```js 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 = 3999, }, new Place { Mesto = "набережная", Price = 199, }, new Place { Mesto = "бульвар", Price = 598, }, new Place { Mesto = "шарага", Price = 10, }, new Place { Mesto = "КБ", Price = 9999, }, }; 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; } } ``` ### Вывод: ```js Даша - 18 Малыш - 17 Милана - 16 Фрай - 22 ```