место в рейтинге
  • 6050
  • 21
  • 11
Нравится блог?
Подписывайтесь!

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

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

   
  1. public void Linq6()
  2. {
  3. int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
  4. var numsPlusOne =
  5. from n in numbers
  6. select n + 1;
  7. Console.WriteLine("Numbers + 1:");
  8. foreach (var i in numsPlusOne)
  9. {
  10. Console.WriteLine(i);
  11. }
  12. }

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

   
  1. public static IEnumerable<NetworkInterfaceInformation> InterfaceCollection =
  2. NetworkInterface.GetAllNetworkInterfaces()
  3. .SelectMany(
  4. networkInterface => networkInterface.GetIPProperties().UnicastAddresses,
  5. (networkInterface, property) => new NetworkInterfaceInformation(networkInterface, property))
  6. .Where(p => p.Interface.OperationalStatus != OperationalStatus.Up)
  7. .Where(p => p.Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
  8. .Where(p => p.Property.IPv4Mask.Equals(IPAddress.Parse("255.255.255.0")));

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

   
  1. public class NetworkInterfaceInformation
  2. {
  3. public NetworkInterfaceInformation(NetworkInterface @interface, UnicastIPAddressInformation property)
  4. {
  5. Interface = @interface;
  6. Property = property;
  7. }
  8. public NetworkInterface Interface { get; private set; }
  9. public UnicastIPAddressInformation Property { get; private set; }
  10. }

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

Простенький пример агрегирования:

   
  1. Func<int, int, int> func = (x, y) => x + y;
  2. const int to = 5;
  3. int result = Enumerable
  4. .Range(1, to)
  5. .Aggregate((a, x) =>
  6. {
  7. var z = func(x,a);
  8. Console.WriteLine("{0}, {1}, {2}", x, a, z);
  9. return z;
  10. });
  11. Console.WriteLine("f({0}) = {1}", to, result);

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

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

Hes
14 сентября 2014, 13:43
501

Загрузка...
Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Мой дом – не гостиница. Я не останавливаюсь у своей родни, потому что знаю, что это такое

Мой дом – не гостиница. Я не останавливаюсь у своей родни, потому что знаю, что это такое

Наступил долгожданный момент и мы смогли заселиться в собственную квартиру. А потом началось... Все знакомые, родственники, даже коллеги и соседи родителей вспомнили о нашем существовании.
Idealovnet
14 окт. 2017 / 20:38
  • 8830
  • 82
Работа на EXPO. «Улыбайтесь, вы – лица Казахстана»

Работа на EXPO. «Улыбайтесь, вы – лица Казахстана»

Продление перерывов, втыки от менеджеров, борьба за стенды, кучкования, как мы друг-друга прикрывали, защищали от гостей. Все эти события доставляли радость, и каждый день на работу я приходила...
madiNAtty
14 окт. 2017 / 22:34
  • 6096
  • 23
О проститутках, ЗППП и других сексуальных страстях

О проститутках, ЗППП и других сексуальных страстях

У меня обширный сексуальный опыт, и я этим не хвастаюсь. Будь у меня возможность, променял бы это всё на одного партнёра. Но так как с личной жизнью не заладилось, а секс я очень люблю, то приходилось изворачиваться.
bez_prav
18 окт. 2017 / 18:01
Я четко помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж»

Я четко помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж»

У нас была особенная атмосфера, мы постоянно были вместе, читали треки, летом часто поднимались в горы. Гуляли пешком по ночному городу, иногда до утра. Снимали хату и представляли совместную жизнь...
Dominator-kz
14 окт. 2017 / 22:29
Отчего в Казахстане предвзятое отношение к отечественному продукту?

Отчего в Казахстане предвзятое отношение к отечественному продукту?

Вы когда-нибудь пользовались казахстанской косметикой? Я тоже нет, поэтому сразу же откликнулась на приглашение своего фейсбук-френда протестировать отечественные крема… из Степногорска.
Shimanskaya
16 окт. 2017 / 11:32
  • 2750
  • 30
Я помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж». Часть 2

Я помню тот день, когда мне позвонили друзья и сообщили: «Она выходит замуж». Часть 2

Я знал дату свадьбы. За неделю до свадьбы в соцсети "Вконтакте" на все мои последние фото, был проставлен лайк с её профиля. Сердце забилось сильнее. В душе загорелась наивная, крошечная надежда.
Dominator-kz
17 окт. 2017 / 15:41
Мой парень – «тиран». Почему я вступила в такие отношения?

Мой парень – «тиран». Почему я вступила в такие отношения?

История из моей жизни. Я вспоминаю эти отношения и сама не могу понять - как так произошло? А дело в том, что вы и сами не заметите. Это наступает плавно и динамично.
Altynai_JA
18 окт. 2017 / 14:17
«Автобусная неделя». Выдержит ли аким Шымкента давку в общественном транспорте?

«Автобусная неделя». Выдержит ли аким Шымкента давку в общественном транспорте?

Аким Шымкента Габидулла Абдрахимов нашёл решение накопившихся проблем городского транспорта. Все ключевые работники акимата некоторое время будут сами ездить на автобусах.
openqazaqstan
18 окт. 2017 / 10:53
  • 1635
  • 30
Аркадий Волож привел в Казахстан «Яндекс.Лицей». Плакать или радоваться?

Аркадий Волож привел в Казахстан «Яндекс.Лицей». Плакать или радоваться?

"Яндекс.Лицей" зашел в казахстанские школы. План - учить бесплатно программированию, формировать себе кадры и выйти на мощность 10 тысяч школьников в год.
Zhumanova
18 окт. 2017 / 8:36
  • 1429
  • 10