LINQ
-
Хабрахабр
C# Linq для GraphQL-запросов
Немного про GraphQL Дисклеймер: В статье рассматриваются только Query (аналог GET-запросов). Мутации и подписки не рассматриваются. GraphQL - это инструмент, позволяющий заменить привычное API. Вместо написания контроллеров и методов, вы пишете методы в Query: public class GraphQLQuery } Всего пару строк и вы добавили в приложение новый GraphQL-endpoint. Теперь к нему можно обратиться POST-запросом (обычно), передав вот такую строку: users…
Читать далее » -
Хабрахабр
Сумачечая производительность LINQ в .Net7
Исторически так сложилось, что LINQ взыскал сомнительную репутацию за его слабую производительность. LINQ медленный, аллоцирует память, сложно читается, поэтому обычно его используют как инструмент запросов к БД и то, зачастую сложные запросы легче написать на SQL. Даже на собеседованиях джунов просят не использовать LINQ в алгоритмах. "Я знавал одного разраба, который мог написать запрос абсолютно любой сложности на LINQ, но…
Читать далее » -
Хабрахабр
Прокачиваем kotlin: используем AST лямбд в рантайме
Я слышал, ты любишь компилировать kotlin... На kotlin для работы с базами я использую библиотечку JOOQ. У неё хороший генератор кода и достаточно вменяемый синтаксис для составления запросов. Вот например: dsl.selectFrom(Tables.ANIMALS) .where(Tables.ANIMALS.POPULATION.greaterThan(1000)) .orderBy(Tables.ANIMALS.NAME) .map : ${it.population}" } .toList() Можно ли лучше? Например, как это сделано в C# LINQ? Да, можно. Вот рабочий код: dsl.selectQueryableFrom(Tables.ANIMALS) .filter { it.population > 1000 }…
Читать далее » -
Хабрахабр
Компиляция математических выражений
Привет. В этом очерке расскажу, как я реализовывал компиляцию математических (численных и логических) выражений в делегат при помощи Linq Expression. Навигация: Проблема · Правила компиляции · Компилятор · Дефолтные правила · Красивый API · Производительность · Примеры работы · Заключение · Ссылки Что мы хотим? Мы хотим скомпилировать выражение в функцию от произвольного числа аргументов произвольного типа, причем не только…
Читать далее » -
Хабрахабр
[Перевод] IQueryable порождает сильную связанность
Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>. Почти всегда это плохая идея. В этой статье я объясню почему. В кратце, IQueryable<T> — это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой . NET. Его почти невозможно реализовать полностью. Эта статья о проблемах реализации API на основе интерфейса IQueryable<T>. Это не претензия к интерфейсу…
Читать далее » -
Хабрахабр
Когда программисту нечего делать или оптимизируем код при помощи Linq.Expression
Так сложилось, что активно кодировать мне не удается уже лет пять. Так что каждый шанс залезть в код и напакостить там товарищам воспринимается с радостью, как возможность тряхнуть стариной и убедиться что есть еще “ягоды в ягодицах” (ака шило в жопе). Да, и сразу оговорюсь, что статья скорее туториал, не из серии "смотрите ух как круто я могу", а из серии…
Читать далее » -
Хабрахабр
Оживляем деревья выражений кодогенерацией
Деревья выражений System. Linq. Expressions дают возможность выразить намерения не только самим кодом, но и его структурой, синтаксисом. Их создание из лямбда-выражений — это, по сути, синтаксический сахар, при котором пишется обычный код, а компилятор строит из него синтаксическое дерево (AST), которое в том числе включает ссылки на объекты в памяти, захватывает переменные. Это позволяет манипулировать не только данными, но…
Читать далее » -
Хабрахабр
[Перевод] Дерево синтаксиса и альтернатива LINQ при взаимодействии с базами данных SQL
В этой статье, на примере простых логических выражений, будет показано, что такое абстрактное синтаксическое дерево и что с ним можно делать. Так же будет рассмотрена альтернатива выражениям LINQ для выполнения запросов к SQL базам данных. История из жизни разработчика Это был какой-то легаси проект, и меня попросили улучшить его «расширенные» возможности фильтрации. Раньше у них было что-то вроде этого: А…
Читать далее » -
Хабрахабр
LINQ на JavaScript для самых маленьких
Шел очередной день самоизоляции, и я делал один из тех проектов для себя, которые мы забрасываем через пару дней после того как начали. Ну вы знаете, тот проект, который сделает вас знаменитым, позволит вам выучить новый ЯП, новый фреймворк и все такое. В общем, это был самый обычный день, самой обычной пандемии. Ничего не предвещало беды, пока одна библиотека, которой…
Читать далее » -
Хабрахабр
Неудачная статья про ускорение рефлексии
Сразу объясню название статьи. Изначально планировалось дать хороший, надежный совет по ускорении использования рефлекшена на простом, но реалистичном примере, однако в ходе бенчмаркинга выяснилось, что рефлексия работает не так медленно, как я думал. Да и вообще проблема не с ней. Так как пример достаточно жизненный и реализованный в принципе как обычно делается в энтерпрайзе, получилось достаточно интересная, как мне кажется,…
Читать далее »