Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vse_shpory_po_OOP_polnye.doc
Скачиваний:
6
Добавлен:
20.09.2019
Размер:
295.94 Кб
Скачать

25. Конструкция from…select… Разделы конструкции. Условия. Проекция. Анонимные типы данных.

Данная конструкция называется проектором, потому что проектирует, или транслирует, данные внутри запроса в форму, удобную для применения. В запросе LINQ конструктор select используется для производства конечного результата запроса. Если в выражении запроса присутствуют фильтрующие конструкции, они должны предшествовать select. Фильтры состоят из ключево­го слова where, за которым следует выражение предиката. Конструкция where транслируется в вызов расширяющего метода Where как лямбда-выражение. Вызовы Enumerable .Where, которые используются, если вы выполняете запрос на типе IEnumerable, преобразуют лямбда-выражение в делегат. И наоборот, вызовы Queryable .Where, которые используются, если вы выполняете запрос к коллекции через интерфейс IQueryable, преобразуют лямбда-выражения в деревья выраже­ний. Компилятор преобразует конструкцию select в вызов распределяющего метода select. Тело конструкции select конвертируется в лямбда-выражение, которое передается в метод select, использующий его для производства каждого элемента результирующего набора. select new {Input =… Output =…}

Каждый запрос начинается со слова from. Конструкция from – это генератор, который также определяет переменную диапазона – локальную переменную, используемую для представления каждого элемента входной коллекции, по мере применения к нему выражения запроса. Конструкция from похожа на оператор foreach в стиле императивного программирования, а переменная диапазона идентична по своему предназначению переменной итерации в том же foreach. Запрос может содержать более одной конструкции from. Тогда будет более 1 переменной диапазона: Var….. = from … in…

from … in…

select new {…}

Семейства классов, не делающих больше ничего, кроме предоставления свойств, встречаются довольно часто.

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

Анонимные типы предлагают способ для упрощения этой модели программирования. В частности, они позволяют не определять никаких простых типов для хранения данных, а использовать вместо этого компилятор С# для автоматического создания типов на базе данных, которые в них нужно хранить.

В качестве альтернативного варианта можно использовать для этого и анонимный тип,

var curry = new { MainIngredient = "Lamb", Style = "Dhansak", Spiciness = 5 };

Используется ключевое слово var. Объясняется это тем, что у анонимных типов нет идентификатора, который можно было бы использовать разработчику. На самом деле, на внутреннем уровне у них все-таки есть идентификатор, но для использования разработчиком в своем коде он не доступен. Во-вторых, никакое имя для типа после ключевого слова new не указывается. Именно благодаря этому компилятор и узнает, что требуется использовать анонимный тип. IDE-среда распознает определение анонимного типа и соответствующим образом обновляет данные IntelliSense.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]