Рантайм и типы - Expression tree | Деревья выражений 

Page / - Изменено Alexandr Fokin в 2024/02/10 14:04 

Expression tree | Деревья выражений 
Изменено Alexandr Fokin
в 2024/02/10 14:04

Оглавление

 	Деревья выражений, ExpressionTree, Expression Tree, ExpressionTrees, Expression Trees	
ExpressionTree	Позволяет накапливать выражения, содержащие операторы языка c#, в виде древовидной структуры. А после этого скомпилировать эту структуру в делегат.
(Или обрабатывать, как делает EntityFramework | EntityFrameworkCore для трансляции запросов).
При этом формировать и компилировать деревья выражений можно в рантайме.
Замечание: вызов делегата, созданного на основе дерева выражений, быстрее, чем вызов метода напрямую через Reflection | Рефлексия .	
Может использоваться для:	•	Динамическое создание поведения.
•	Динамическое создание фабрики для объекта (в том числе Generic версии).
•	Ускорении повторяющихся операций, использующих рефлексию.
•	Создания Generic типа с возможностью выполнять математические операции над элементами T.
Например матрица <int> или <double>, в которой будет логика складывающая значения ячеек
•	Выполнения маппинга свойств (Как более быстрый аналог Рефлексия | Reflection)
•	IQueryable провайдер, формирующий запрос во внешнее хранилище (EntityFramework SQL)	
Ссылки:	GoF Design Patterns | Паттерны Interpreter, Visitor
Введение в Expressions в языке C#
http://sonyks2007.blogspot.com/2014/07/expressions-c.html
Expression Tree. Просто о сложном
http://sonyks2007.blogspot.com/2014/08/expression-tree.html
Expressions в C# — impress yourself!
https://habr.com/ru/post/83169/
Деревья выражений в C# на примере нахождения производной (Expression Tree Visitor vs Pattern matching)
https://habr.com/ru/post/486972/
DotNet | Максим Аршинов — Деревья выражений в enterprise-разработке (IQueryable, JavaScript, Reflection | Рефлексия, Moq)
https://www.youtube.com/watch?v=J2XzsCoJM4o	

Внутренние ссылки:
Дочерние страницы:
Обратные ссылки:
•	IQueryable
•	EntityFramework | EntityFrameworkCore
•	AutoFilterer
•	Анемичная или богатая модель
•	linq2db
•	Serialize.Linq
•	Добавление ссылки после создания Activity
•	linq2db. InsertOrUpdate all properties.
•	Сценарии