Рубрика «expression trees»
Expression: всё что нужно для старта
2025-07-29 в 13:16, admin, рубрики: expression, expression trees, деревья выражений, деревья выражений в c#
Гибкая фильтрация EFCore с помощью Expression
2024-10-19 в 9:15, admin, рубрики: C#, efcore, entityframework, expression, expression trees, Expressiontree, фильтрация Фильтрация данных в EntityFramework — это довольно простая задача, которую можно легко решить с помощью метода Where() в LINQ. Для примеров я буду использовать самую популярную доменную область для всех вузовских лабораторных и практических работ, а именно - библиотеку. Например, если нужно отфильтровать книги по году издания, можно сделать это следующим образом:
var filteredBooks = await context.Books.Where(x => x.Year == 2024);
Основы деревьев выражений в .NET
2024-10-02 в 11:25, admin, рубрики: expression tree, expression tree visitor, expression trees, деревья выраженийДеревья выражений — одна из сложных тем в C#/.NET, которую необходимо понять. Они представляют код в виде древовидной структуры данных, где каждый узел является выражением (например, вызов метода, бинарная операция или константа). Они позволяют динамически создавать, исследовать и выполнять код во время выполнения.
Деревья выражений особенно полезны для создания динамического кода, анализа кода во время выполнения и для таких фреймворков, как LINQ to SQL и Entity Framework, для преобразования кода C# в SQL-запросы или другие операции.
Оживляем деревья выражений кодогенерацией
2021-01-01 в 20:27, admin, рубрики: .net, C#, expression trees, fody, linq, module initializer, roslyn, source generators, uno, Visual Studio, xamarin, деревья выражений, кодогенерация, рефлексияДеревья выражений System.Linq.Expressions дают возможность выразить намерения не только самим кодом, но и его структурой, синтаксисом.
Их создание из лямбда-выражений — это, по сути, синтаксический сахар, при котором пишется обычный код, а компилятор строит из него синтаксическое дерево (AST), которое в том числе включает ссылки на объекты в памяти, захватывает переменные. Это позволяет манипулировать не только данными, но и кодом, в контексте которого они используются: переписывать, дополнять, пересылать, а уже потом компилировать и выполнять.
Свой конвертер JSON или ещё немного про ExpressionTrees
2019-08-21 в 10:45, admin, рубрики: .net, C#, deserialization, example, expression trees, json, json.net, reflection, serialization
Сериализация и десериализация — типичные операции, к которым современный разработчик относится как к тривиальным. Мы общаемся с базами данных, формируем HTTP-запросы, получаем данные через REST API, и часто даже не задумываемся как это работает. Сегодня я предлагаю написать свой сериализатор и десериализатор для JSON, чтобы узнать, что там «под капотом».
Читать полностью »
Свой mapper или немного про ExpressionTrees
2019-08-16 в 13:29, admin, рубрики: .net, automapper, C#, example, expression, expression trees, reflection
Сегодня мы поговорим про то, как написать свой AutoMapper. Да, мне бы очень хотелось рассказать вам об этом, но я не смогу. Дело в том, что подобные решения очень большие, имеют историю проб и ошибок, а также прошли долгий путь применения. Я лишь могу дать понимание того, как это работает, дать отправную точку для тех, кто хотел бы разобраться с самим механизмом работы «мапперов». Можно даже сказать, что мы напишем свой велосипед.
Читать полностью »
Помогаем Queryable Provider разобраться с интерполированными строками
2019-03-03 в 18:32, admin, рубрики: .net, C#, dotnet, entity framework core, expression trees, interpolation, linq, linq2sql, string, ПрограммированиеТонкости Queryable Provider
Queryable Provider не справляется вот с этим:
var result = _context.Humans
.Select(x => $"Name: {x.Name} Age: {x.Age}")
.Where(x => x != "")
.ToList();
Он не справится с любым выражением, которое будет использовать интерполированную строку, но без трудностей разберет такое:
var result = _context.Humans
.Select(x => "Name " + x.Name + " Age " + x.Age)
.Where(x => x != "")
.ToList();
Особенно болезненно править баги после включение ClientEvaluation(исключениe при вычислении на клиенте), все профайлы автомаппера должны быть подвергнуты жесткому анализу, на поиск этой самой интерполяции. Давайте разберемся в чем дело и предложим свое решение проблемы
Деревья выражений в enterprise-разработке
2018-09-26 в 12:09, admin, рубрики: .net, .net clr, C#, clr, dotnext, dotnext2018moscow, expression tree, expression trees, linq, Блог компании JUG.ru Group, Компиляторы, Программирование, системное программированиеДля большинства разработчиков использование expression tree ограничивается лямбда-выражениями в LINQ. Зачастую мы вообще не придаем значения тому, как технология работает «под капотом».
В этой статье я продемонстрирую вам продвинутые техники работы с деревьями выражений: устранение дублирования кода в LINQ, кодогенерация, метапрограммирование, транспиляция, автоматизация тестирования.
Вы узнаете, как пользоваться expression tree напрямую, какие подводные камни приготовила технология и как их обойти.

Под катом — видео и текстовая расшифровка моего доклада с DotNext 2018 Piter.
Читать полностью »
Internal DSL & Expression Trees — динамическое создание функций serialize, copy, clone, equals (Часть I)
2018-08-09 в 14:21, admin, рубрики: .net, C#, dsl, eval in C#, expression trees
Статья посвящена двойному применению API Expression Trees — для разбора выражений и для генерации кода. Разбор выражений помогает построить структуры представления (они же структуры представления проблемно-ориентированного языка Internal DSL), а кодогенерация позволяет динамически создавать эффективные функции — наборы инструкций задаваемые структурами представления.
Демонстрировать буду динамическое создание итераторов свойств: serialize, copy, clone, equals. На примере serialize покажу как можно оптимизировать сериализацию (по сравнению с потоковыми сериализаторами) в классической ситуации, когда "предварительное" знание используется для улучшения производительности. Идея в том, что вызов потокового сериалайзера всегда проиграет "непотоковой" функции точно знающей какие узлы дерева надо обойти, при этом выписанной "не руками" а динамически, по правилам. Inernal DSL решает задачу компактного задания правила обхода дерева свойств (вычислений) . Бенчмарк сериализатора скромный, но он важен тем, что добавляет подходу, построенному вокруг применения конкретного Internal DSL Includes (диалект того Include/ThenInclude что из EF Core) и применению Internal DSL в целом, необходимой убедительности.
Готовим ORM, не отходя от плиты. Генерируем SQL — запрос на основе бинарных деревьев выражений
2017-01-13 в 0:38, admin, рубрики: .net, ASP, C#, expression trees, orm
Статья является продолжением первой части. В посте рассмотрим построение SQL-запроса по объектной модели типа, в виде бинарного дерева выражений и сопутствующие темы параметризации SQL-запросов, оптимизации рефлексии. Темы этой статьи сами по себе весьма обособленны, поэтому можно читать особо не обращая внимание на первую часть. Еще раз отмечу, данное решение, является «дело было вечером — делать было нечего» и не претендует на лавры промышленного продукта.
Читать полностью »
