LINQ

  • ХабрахабрФото C# Linq для GraphQL-запросов

    C# Linq для GraphQL-запросов

    Немного про GraphQL Дисклеймер: В статье рассматриваются только Query (аналог GET-запросов). Мутации и подписки не рассматриваются. GraphQL - это инструмент, позволяющий заменить привычное API. Вместо написания контроллеров и методов, вы пишете методы в Query: public class GraphQLQuery } Всего пару строк и вы добавили в приложение новый GraphQL-endpoint. Теперь к нему можно обратиться POST-запросом (обычно), передав вот такую строку: users…

    Читать далее »
  • ХабрахабрФото Сумачечая производительность LINQ в .Net7

    Сумачечая производительность LINQ в .Net7

    Исторически так сложилось, что LINQ взыскал сомнительную репутацию за его слабую производительность. LINQ медленный, аллоцирует память, сложно читается, поэтому обычно его используют как инструмент запросов к БД и то, зачастую сложные запросы легче написать на SQL. Даже на собеседованиях джунов просят не использовать LINQ в алгоритмах. "Я знавал одного разраба, который мог написать запрос абсолютно любой сложности на LINQ, но…

    Читать далее »
  • ХабрахабрФото Прокачиваем kotlin: используем AST лямбд в рантайме

    Прокачиваем 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 порождает сильную связанность

    [Перевод] IQueryable порождает сильную связанность

    Время от времени я встречаю людей, пытающихся выразить API в терминах IQueryable<T>. Почти всегда это плохая идея. В этой статье я объясню почему. В кратце, IQueryable<T> — это один из лучших примеров заголовочного интерфейса (Header Interface), предлагаемых платформой . NET. Его почти невозможно реализовать полностью. Эта статья о проблемах реализации API на основе интерфейса IQueryable<T>. Это не претензия к интерфейсу…

    Читать далее »
  • ХабрахабрФото Когда программисту нечего делать или оптимизируем код при помощи Linq.Expression

    Когда программисту нечего делать или оптимизируем код при помощи Linq.Expression

    Так сложилось, что активно кодировать мне не удается уже лет пять. Так что каждый шанс залезть в код и напакостить там товарищам воспринимается с радостью, как возможность тряхнуть стариной и убедиться что есть еще “ягоды в ягодицах” (ака шило в жопе). Да, и сразу оговорюсь, что статья скорее туториал, не из серии "смотрите ух как круто я могу", а из серии…

    Читать далее »
  • ХабрахабрФото Оживляем деревья выражений кодогенерацией

    Оживляем деревья выражений кодогенерацией

    Деревья выражений System. Linq. Expressions дают возможность выразить намерения не только самим кодом, но и его структурой, синтаксисом. Их создание из лямбда-выражений — это, по сути, синтаксический сахар, при котором пишется обычный код, а компилятор строит из него синтаксическое дерево (AST), которое в том числе включает ссылки на объекты в памяти, захватывает переменные. Это позволяет манипулировать не только данными, но…

    Читать далее »
  • ХабрахабрФото [Перевод] Дерево синтаксиса и альтернатива LINQ при взаимодействии с базами данных SQL

    [Перевод] Дерево синтаксиса и альтернатива LINQ при взаимодействии с базами данных SQL

    В этой статье, на примере простых логических выражений, будет показано, что такое абстрактное синтаксическое дерево и что с ним можно делать. Так же будет рассмотрена альтернатива выражениям LINQ для выполнения запросов к SQL базам данных. История из жизни разработчика Это был какой-то легаси проект, и меня попросили улучшить его «расширенные» возможности фильтрации. Раньше у них было что-то вроде этого: А…

    Читать далее »
  • ХабрахабрФото LINQ на JavaScript для самых маленьких

    LINQ на JavaScript для самых маленьких

    Шел очередной день самоизоляции, и я делал один из тех проектов для себя, которые мы забрасываем через пару дней после того как начали. Ну вы знаете, тот проект, который сделает вас знаменитым, позволит вам выучить новый ЯП, новый фреймворк и все такое. В общем, это был самый обычный день, самой обычной пандемии. Ничего не предвещало беды, пока одна библиотека, которой…

    Читать далее »
  • ХабрахабрФото Неудачная статья про ускорение рефлексии

    Неудачная статья про ускорение рефлексии

    Сразу объясню название статьи. Изначально планировалось дать хороший, надежный совет по ускорении использования рефлекшена на простом, но реалистичном примере, однако в ходе бенчмаркинга выяснилось, что рефлексия работает не так медленно, как я думал. Да и вообще проблема не с ней. Так как пример достаточно жизненный и реализованный в принципе как обычно делается в энтерпрайзе, получилось достаточно интересная, как мне кажется,…

    Читать далее »


Кнопка «Наверх»