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

22. Комбинирование выражений посредством класса InvocatedExpression.

В пространстве имен System.Linq.Expressions, отвечающем за деревья выражений, имеются следующие классы. Классы разделяются на абстрактные и обычные: 1) Expression (абстрактный) – верхушка иерархии. Он содержит в себе множество статических методов для производства выражений различных типов. 2) ParameterExpression – объекты класса содержат параметр для последующей подстановки. 3) BinaryExpression – соответствует бинарным операциям. 4) UnaryExpression – соответствует унарным операциям. 5)ConstantExpression – соответствует константе. 6)Expression <TDelegate> - соответствует строго типизированное дерево выражений. 7)InvocationExpression – позволяет применять лямбда-выражения к списку деревьев выражений. Этот класс играет решающую роль, когда нужно скомбинировать 2 или более деревьев выражений.

Синтаксис класса InvocationExpression:

public sealed class InvocationExpression : Expression

Некоторые свойства класса InvocationExpression:

1) Arguments - получает аргументы, к которым применяется делегат или лямбда-выражение.

2) CanReduce - Указывает, что узел можно сократить до более простого. Если возвращается значение true, для получения сокращенной формы можно вызвать Reduce().

3) Expression - получает делегат или лямбда-выражение для применения.

Некоторые методы класса InvocationExpression:

1) Reduce - сокращает данный узел до более простого выражения. Если CanReduce возвращает значение true, данный метод должен вернуть допустимое выражение. Данный метод может вернуть другой узел, который нужно будет уменьшать еще раз.

2) ReduceAndCheck - сокращает данный узел до более простого выражения. Если CanReduce возвращает значение true, данный метод должен вернуть допустимое выражение. Данный метод может вернуть другой узел, который нужно будет уменьшать еще раз.

3) ReduceExtensions - сокращает выражение до известного типа узла (не являющегося узлом Extension) или возвращает выражение, если оно имеет известный тип.

4) Update - создает новое выражение, идентичное данному, но использующее предоставленные дочерние элементы. Если все дочерние элементы идентичны, возвращается данное выражение.

5) Expression.Invoke() - создает выражение InvocationExpression. Имеет 2 перегрузки:

1. Invoke(Expression, IEnumerable(Of Expression));

2. Invoke(Expression, Expression[ ]).

23. Язык интегрированных запросов linq. Назначение, технические средства для реализации языка. Группы языка linq.

LINQ - новая технология для доступа к данным из различных источников. LINQ запросы возвращают набор подходящих объектов. Этот набор называется последовательностью.

Большинство последовательностей в LINQ имеет тип IEnumerable<T> - где T – тип данных объектов в последовательности.

В рамках LINQ различают следующие разделы:

LINQ to Objects – название для IEnumerable<T> API для стандартных операций запросов; применяется к различным объектам (списки, карты, массивы); стандартные операции запросов – это статические методы класса System.Linq.Enumerablе.

LINQ to XML – название присвоенное интерфейсу LINQ API для работы с XML; применяется к XML-документам; чтобы воспользоваться нужна ссылка на сборку System.Xml.Linq.dll и директива using следующего вида: using System.Xml.Linq;

LINQ to DataSet- интерфейс LINQ API для DataSet;

LINQ to SQL - название, присвоенное IQueryable <T>, позволяющий запросам работать с базой данных Microsoft SQL Server; чтобы воспользоваться нужна ссылка на сборку System.Data.Linq.dll и директива using следующего вида: using System.Data.Linq;

LINQ to Entittes - альтернативный интерфейс LINQ API для обращения к базе данных; он отделяет сущностную объектную модель от физической базы данных.

LINQ основана на расширяющих методах и λ-выражениях. Для удобства в язык введено несколько синтаксических конструкций, которые аналогичны SQL-запросам. В отличие от SQL запросы в LINQ строго типизированы. Например, простейший LINQ-запрос, который выбирает из массива все четные числа.

int [] mas = new int []{2,3,6,8,1};

var res = from x in mas where x%2 == 0 select x;

foreach (var x in res)

{ Console.WriteLine(x);}

Вместо LINQ запроса: var res = from x in mas where x%2 ==0 select x; можно записать: var res = mas.where (x => x%2 == 0);

Каждый запрос начинается с ключевого слова from. Оно определяет переменную диапазона, т.е. локальную переменную для каждого элемента коллекции. Потом in и указывается коллекция. Можно указывать 2 локальных переменных: from x in arr1 from y in arr2. Для каждого х каждый у. Коллекцию должен реализовывать интерфейс IEnumerable. <>

Используются также конструкции:

Where <условие отбора> - для нее указывается предикат - любое логическое выражение.

Join – для присоединения другой таблицы

Orderby - для группировки

Select – проектор (который генерирует конечный результат) <выражение для проектора>, оно транслируется в λ-выражение.

Group – группировка.

Let – вводит внутреннюю переменную, для того, чтобы избавится от повторений выражений в LINQ запросе.

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