LinQer — это библиотека, которая возникла из-за необходимости исправить две проблемы встроенных методов итерации Javascript. Он привносит в JavaScript подход .NET LINQ к базам данных.
Проблемы с итерационными методами, которые требовали исправления, в основном заключались в следующем:
они применимы только к массивам
и это
они нетерпеливы, что означает, что набор, подвергающийся периодическим преобразованиям, является полным, даже если от него требуется всего несколько элементов:
«Каждый раз, когда вы фильтруете или отображаете что-то, вы создаете новый массив».
LinQer представляет класс Enumerable, как и его аналог в .NET, который обертывает любую итеративную структуру, например генераторы, а не только массивы, предоставляя средства для работы с ними в том же интерфейсе, который поддерживает .NET Enumerable. Например, вполне допустимая операция для экземпляра Enumerable следующая:
const result = enumerable .where (item => !! item.value) .select (item => {value: item.value, key: item.name}) .groupBy (item => item.key) .where (g => g.length> 10) .orderBy (g => g.key) .selectMany () .skip (15) .take (5);
Таким образом, помимо встроенных операций сопоставления, фильтрации и сокращения, LinQer также расширяет Javascript этими многофункциональными конструкциями. Тем не менее, не был реализован весь спектр методов .NET Emumerable из-за несоответствия между C # и Javascript; некоторые вещи просто не имеют смысла в контексте Javascript. Следовательно, toDictionary, toHashSet, toLookup, toList были исключены, а вместо них использовались toMap, toSet, toObject, toArray. Операция соединения также не учитывалась.
Написанный на Typescript, LinQer использует генераторы и эту ленивую оценку. Поэтому теперь мы можем ограничить операции только интересующими элементами коллекции при преобразовании.
LinQer разделен на две части: Linqer.slim.js и Linqer.js. Первый предоставляет основные методы, а второй — все (ну и большинство) исходных методов .NET Enumerable, включая методы Slim, поэтому вы можете выбрать тот, который подходит для конкретных обстоятельств. Чтобы получить полную информацию о поддерживаемых методах, перейдите в его репозиторий на Github.
Помимо репо, автор теперь предлагает библиотеку в виде пакета npm, что делает ее установку такой же простой, как:
$ npm install @ siderite / linqer
И наконец, совет по быстрому обучению написанию запросов Linq — получить замечательный инструмент .NET LINQPad и поиграть с ним, чтобы понять, как работают запросы. Затем вы можете просто перенести их дословно через LinQer в свои программы JavaScript и наслаждаться мощь Linq в JavaScript!