СиППО (67-73) (987685)

Файл №987685 СиППО (67-73) (Ответы на все вопросы)СиППО (67-73) (987685)2015-08-02СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла





67.Ламбда-выражения и их использование на LINQ

68.Две разновидности синтаксиса на LINQ

69.Отложенное выполнение операторов на LINQ

70.Операторы Select, Where, Take, Skip, TakeWhile, SkipWhile

71.Агрегирующие функции на LINQ

72.Группировка данных на LINQ

73.Оператор соединения на LINQ





67.Ламбда-выражения и их использование на LINQ

Простейший запрос состоит из одной входной по­следовательности и одного оператора. Например, мы можем применить оператор where к строковому массиву и извлечь те его элементы, длина которых не меньше четырех символов. Поскольку стандартные операторы запроса реали­зованы в виде методов расширения, мы можем вы­звать Where непосредственно ДЛЯ массива names так, словно это метод экземпляра:

IEnumerable<string> filteredNames = names."Where (n => n.Length >= 4);

Большинство операторов запроса принимает лямбда-выражение в качестве аргумента. Лямбда-выражение помогает направить и сформировать запрос. В нашем примере лямбда-выражение выглядит так:

n => п.Length >= 4

Входной аргумент соответствует входному эле­менту. В этом случае входной аргумент n пред­ставляет имя в массиве и имеет тип string. Опера­тор where требует, чтобы лямбда-выражение возвращало значение типа bool. Когда оно истин­но, элемент должен быть включен в выходную по­следовательность.

Будем называть такие запросы лямбда-запросами

Чтобы строить более сложные запросы, вы добав­ляете новые операторы, образуя цепочку. Напри­мер, в следующем запросе из массива извлекаются все строки с буквой "а", после чего они сортиру­ются по длине и переводятся в верхний регистр:

string[] names = {"Tom","Dick","Harry","Mary","Jay" }; IEnumerable<string> query = names.Where (n => n.Contains ("a")) .OrderBy (n => n.Length) .Select (n => n.ToUpper());

foreach (string name in query)

Console.Write (name + "|");

Результат: JAY|MARY|HARRY|

Примечание

Оператор запроса никогда не изменяет вход­ную последовательность. Вместо нее он воз­вращает новую. Это соответствует парадигме функционального программирования, из кото­рой исходит LINQ.

Когда операторы запроса выстраиваются в цепоч­ку, как в нашем примере, выходная последователь­ность одного оператора становится входной для следующего.

В предыдущих примерах мы передавали оператору where такое лямбда-выражение:

n => n.Contains ("а") // На входе строка,

// на выходе булево выражение

Предназначение лямбда-выражения зависит от конкретного оператора запроса. С оператором where оно показывает, должен ли элемент попадать в выходную последовательность. У оператора OrderBy лямбда-выражение отображает каждый элемент входной последовательности на ключ сор­тировки, а у оператора select оно определяет, как должен быть преобразован элемент из входной по­следовательности перед подачей его в выходную.

Примечание

В операторе запроса лямбда-выражение всегда относится к отдельным элементам входной по­следовательности, а не к последовательности в целом.

Вы можете относиться к лямбда-выражению как к обратному вызову. Оператор запроса вычисляет зна­чение лямбда-выражения "по требованию",— как правило, один раз для каждого элемента входной по­следовательности. Лямбда-выражения позволяют вам внести свою логику в операторы запроса. Это делает операторы запроса гибкими и в то же время просты­ми по внутреннему устройству. Приведем полную реализацию метода Enumerable.Where, опустив то, что касается обработки исключений:

public static IEnumerable<TSource> Where<TSource> (

this IEnumerable<TSource> source,

Func<TSource,bool> predicate)

{

foreach (TSource element in source)

if (predicate (element))

yield return element;

}

Лямбда-выражения и типы элементов

В стандартных операторах запроса используются следующие имена обобщенных типов.

Обозначение обобщенного типа

Смысл

TSource

Тип элемента входной последова­тельности

TResult

Тип элемента выходной последова­тельности — отличается от

TSource

TKey

Тип ключа, используемого при сортировке, группировании или объединении

Тип TSource определяется входной последователь­ностью. Типы TResult и Tkey выводятся из вашего лямбда-выражения.



68.Две разновидности синтаксиса на LINQ

Простейший запрос состоит из одной входной по­следовательности и одного оператора. Например, мы можем применить оператор where к строковому массиву и извлечь те его элементы, длина которых не меньше четырех символов. Поскольку стандартные операторы запроса реали­зованы в виде методов расширения, мы можем вы­звать Where непосредственно ДЛЯ массива names так, словно это метод экземпляра:

IEnumerable<string> filteredNames = names."Where (n => n.Length >= 4);

Большинство операторов запроса принимает лямбда-выражение в качестве аргумента. Лямбда-выражение помогает направить и сформировать запрос. В нашем примере лямбда-выражение выглядит так:

n => п.Length >= 4

Входной аргумент соответствует входному эле­менту. В этом случае входной аргумент n пред­ставляет имя в массиве и имеет тип string. Опера­тор where требует, чтобы лямбда-выражение возвращало значение типа bool. Когда оно истин­но, элемент должен быть включен в выходную по­следовательность.

Будем называть такие запросы лямбда-запросами

Чтобы строить более сложные запросы, вы добав­ляете новые операторы, образуя цепочку. Напри­мер, в следующем запросе из массива извлекаются все строки с буквой "а", после чего они сортиру­ются по длине и переводятся в верхний регистр:

string[] names = {"Tom","Dick","Harry","Mary","Jay" }; IEnumerable<string> query = names.Where (n => n.Contains ("a")) .OrderBy (n => n.Length) .Select (n => n.ToUpper());

foreach (string name in query)

Console.Write (name + "|");

//Результат: JAY|MARY|HARRY|

Вот как выглядит тот же запрос в соответст­вии с синтаксисом, облегчающим его восприятие:

string[] names = {

"Tom","Dick","Harry","Mary","Jay" };

IEnumerable<string> query =

from n in names

where n.Contains ("a") // Фильтровать эле­менты

orderby n.Length // Сортировать эле­менты

select n.ToUpper(); // Проецировать каж­дый элемент

foreach (string name in query)

Console.Write (name + "/");

// Результат: JAY/MARY/HARRY/

Запрос с синтаксисом, облегчающим восприятие, всегда начинается с конструкции from и заканчи­вается конструкцией либо select, либо group. Конструкция from объявляет переменную итера­ции (в данном случае n). Вы можете считать, что она используется для перебора элементов входной коллекции, аналогично оператору foreach.

Компилятор обрабатывает запросы с синтаксисом, облегчающим восприятие, переводя их в лямбда-синтаксис. Фактически это означает, что все, написанное вами в соответствии с синтакси­сом, облегчающим восприятие, могло быть написано и с соблюдением лямбда-синтаксиса. Запрос из наше­го примера транслируется в следующий код:

IEnumerable<string> query = names .Where (n => n.Contains ("a")).OrderBy (n => n.Length).Select (n => n.ToUpper());

Затем операторы Where, OrderBy и Select будут откомпилированы по тем же правилам, что и за­просы, изначально написанные с соблюдением лямбда-синтаксиса.

Если оператор запроса не поддерживается синтак­сисом, облегчающим восприятие, вы можете ком­бинировать этот синтаксис с лямбда-синтаксисом. Единственное требование, которое при этом вы­двигается, — каждая составляющая "понятного" синтаксиса должна быть полной (то есть начинать­ся с конструкции from и заканчиваться конструк­цией select ИЛИ group).

Например:

int count =

(

from name in names

where n.Contains ("a")

select name

).Count();

Бывают ситуации, в которых запросы со смешан­ным синтаксисом оказываются самыми эффектив­ными в терминах функциональности и простоты. Избегайте оказывать предпочтение какому-то од­ному из двух вариантов синтаксиса. В противном случае вы не сможете уверенно и безошибочно пи­сать запросы в смешанном синтаксисе!



69.Отложенное выполнение операторов на LINQ

Важной особенностью большинства операторов запроса является тот факт, что они выполняются не тогда, когда сконструированы, а при переборе эле­ментов (то есть когда для соответствующего пере­числителя вызывается метод MoveNext):

var numbers = new List<int>(); numbers.Add (1) ; // Построить запрос

IEnumerable<int> query = numbers.Select (n => n * 10);

numbers.Add (2); // "Незаметно" добавить еще один элемент

foreach (int n in query)

Console.Write (n + "|");

// 10|20|

Дополнительный элемент, который мы "тайком" добавили после конструирования запроса, попадает в результат, потому что ни фильтрация, ни сорти­ровка не происходят, пока не начнет выполняться оператор foreach. Это называется отложенным или "ленивым" выполнением. Отложенное выпол­нение характерно для всех стандартных операто­ров запроса, кроме

· операторов, возвращающих один элемент или скалярное значение, таких как First или Count;

· операторов преобразования типа: ToArray, ToList, ToDictionary, ToLookup

Эти операторы приводят к немедленному выпол­нению запроса, потому что у возвращаемых ими результатов нет механизма, который обеспечивал бы отложенное выполнение. Например, метод Count возвращает целое число, которое затем ни­как не "перебирается". Следующий запрос выпол­няется немедленно:

int matches = numbers.Where (n => n < 2).Count(); // 1

Отложенное выполнение играет важную роль, по­тому что оно отделяет конструирование запроса от его выполнения. Это позволяет вам конструиро­вать запрос за несколько шагов, а также делать LINQ-запросы к SQL.



70.Операторы Select, Where, Take, Skip, TakeWhile, SkipWhile



Проецирование

Оператор Select

Аргумент

Тип

Исходная последо­вательность

IEnumerable<TSource>

Селектор результата

TSource => TResult

Синтаксис,облегчающий восприятие

select выражение_проецирования

Описание

От оператора select вы всегда получаете то коли­чество элементов, которое было на входе. Однако каждый элемент может быть как угодно преобра­зован лямбда-функцией.

В следующем коде выбираются названия всех шрифтов, установленных на компьютере (из про­странства имен System. Drawing):

IEnumerable<string> query =

from f in FontFamily.Families

select f.Name;

foreach (string name in query)

Console.WriteLine (name);

В этом примере предложение select преобразует объект FontFamily в его имя. Вот лямбда-эквивалент этого кода:

IEnumerable<string> query = FontFamily.Families.Select (f => f.Name);

Фильтрация

Метод

Описание

Where

Возвращает под­множество элемен­тов, удовлетворяю­щих данному условию

Take

Возвращает первые count элементов и игнорирует осталь­ные

Skip

Игнорирует первые count элементов и возвращает осталь­ные

TakeWhile

Возвращает элемен­ты из входной последовательности, пока предикат равен

true.

SkipWhile

Игнорирует элемен­ты из входной последовательности, пока предикат равен true, а затем воз­вращает остальные

Distinct

Возвращает коллек­цию, из которой ис­ключены повторяю­щиеся элементы

Каким бы методом фильтрации вы ни пользова­лись, вы всегда получите либо то же самое, либо меньшее количество элементов по сравнению с оригинальной последовательностью. Вы никогда не получите больше! Кроме того, элементы на вы­ходе идентичны оригинальным; они никак не пре­образуются.

Оператор Where

Аргумент

Тип

Исходная последовательность

IEnumerable<TSource>

Предикат

TSource => bool

Характеристики

Тип файла
Документ
Размер
21,07 Kb
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов ответов (шпаргалок)

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее