Агрегат определяет агрегированное значение над экземплярами определенного класса, удовлетворяющими условиям агрегации. Агрегаты бывают следующих типов:
- any - первый попавшийся объект. Результат имеет тип ссылки на объект агрегируемого класса.
Пример | 1any(TObject with Master = Self.Parent)
2//первый попавшийся объект, имеющий значение
3//свойства Master равным значению свойства
4//Parent текущего (контекстного) объекта.
|
- count - количество объектов. Результат имеет целочисленный тип.
Пример | 1count(TObject with Master = Self.Parent)
2//количество объектов, имеющих значение свойства
3//Master равным значению свойства Parent
4//текущего объекта.
|
- sum - сумма значений свойства, поля или функции объектов. Результат имеет тип суммируемого поля, свойства или функции
Пример | 1sum(TExam.Mark with Master = LStudent) //сумма
2//баллов студента по его испытаниям
|
- max, min - соответственно максимальное и минимальное значений свойства, поля или функции объектов. Результат имеет тип агрегируемого поля, свойства или функции
Пример | 1min(TObject.Created) // момент создания первого
2//объекта Системы.
|
Внутри выражения агрегата правила разбора идентификатора изменяются на следующие:
- Контекстная переменная (для выражений условий отбора доменов)
- Имя элемента перечисления
- Имя класса. Если это имя агрегируемого класса, то дальнейшие разыменования относятся к агрегируемому объекту
- Имя поля
- Имя метода
- Имя свойства
- Локальная переменная
- Параметр