---
title: "Для чего нужен Select в Linq."
description: "Метод Select - используется для получения новой последовательности из исходной, путем трансформации ..."
author: "Hes"
published: "2014-09-14T01:43:28+00:00"
modified: "2014-10-24T01:33:06+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/dlya-chego-nuzhen-select-v-linq-429471"
markdown_url: "https://yvision.kz/post/dlya-chego-nuzhen-select-v-linq-429471/markdown"
site_name: "Yvision.kz"
---

# Для чего нужен Select в Linq.

> Метод Select - используется для получения новой последовательности из исходной, путем трансформации ...

Метод Select - используется для получения новой последовательности из исходной, путем трансформации каждого элемента последовательности в новую форму. Пример из MSDN (101 Linq samples):
- public void Linq6()

- {

- int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
- var numsPlusOne =

- from n in numbers

- select n + 1;
- Console.WriteLine("Numbers + 1:");
- foreach (var i in numsPlusOne)

- {

- Console.WriteLine(i);

- }

- }

Можно переписать так: var numsPlusOne = numbers.Select(n=>n+1). Метод SelectMany. Пример из проекта. Мне необходимо искать все существующие работающие сетевые интерфейсы, за исключением локального и извлекать свойства каждого интерфейса. Суть в том, что у каждого интерфейса может быть множество свойств. Поэтому здесь очень хорошо подойдет метод SelectMany. Применение SelectMany

 
 

- public static IEnumerable InterfaceCollection =

- NetworkInterface.GetAllNetworkInterfaces()

- .SelectMany(

- networkInterface => networkInterface.GetIPProperties().UnicastAddresses,

- (networkInterface, property) => new NetworkInterfaceInformation(networkInterface, property))

- .Where(p => p.Interface.OperationalStatus != OperationalStatus.Up)

- .Where(p => p.Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback)

- .Where(p => p.Property.IPv4Mask.Equals(IPAddress.Parse("255.255.255.0")));

Класс, в который будем трансформировать информацию о сетевых интерфейсах и их свойствах.

- public class NetworkInterfaceInformation

- {

- public NetworkInterfaceInformation(NetworkInterface @interface, UnicastIPAddressInformation property)

- {

- Interface = @interface;
- Property = property;

- }

- public NetworkInterface Interface { get; private set; }

- public UnicastIPAddressInformation Property { get; private set; }

- }

Select и SelectMany важны тем, что они позволяют безболезненно обрабатывать списки - неважно, каким путём они получены - Xml, List, IEnumerable, Dictionary, Sql (IQueryable). Все они наследуются от интерфейса IEnumerable/IEnumerable. Также, можно точно сказать что Select/SelectMany это аналоги функций из области функционального программирования - List.map(). А также, практически первый шаг в модели MapReduce. Второй шаг - Aggregate.

Простенький пример агрегирования:
- Func func = (x, y) => x + y;
- const int to = 5;
- int result = Enumerable

- .[Range](http://www.php.net/range)(1, to)

- .[Aggregate](http://www.php.net/aggregate)((a, x) =>

- {

- var z = func(x,a);
- Console.WriteLine("{0}, {1}, {2}", x, a, z);
- return z;

- });
- Console.WriteLine("f({0}) = {1}", to, result);

Абсолютно тот же результат дал бы метод Linq Sum, но я хотел показать именно Aggregate, основные принципы его работы.

Пока на этом всё.

---

Source: [https://yvision.kz/post/dlya-chego-nuzhen-select-v-linq-429471](https://yvision.kz/post/dlya-chego-nuzhen-select-v-linq-429471)