Complete implementation of Language-Integrated Query (LINQ) (ECMAScript 2015 Language Specification)
npm install linq-es2015






The library is a continuous effort to implement LINQ using latest features of TypeScript and JavaScript languages (For ES5 compatible library look at linq-es5 branch). The library is implemented in TypeScript and transpiled into JavaScript. It is distributed as a native module. It utilizes latest ECMAScript 2015 language specification: Iterables ([ [System.iterator] ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)), generators (function), for of loops.
All relevant methods are implemented with deferred execution so no unnecessary iterations are performed.
The code is backwards compatible with linq-es5 and C# implementations.
npm install linq-es2015 --save
`
Once installed it could be loaded and used like this:
`javascript
import * as Enumerable from "linq-es2015";
var count = Enumerable.asEnumerable( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] )
.Where(a => a % 2 == 1)
.Count()
var iterable = Enumerable.asEnumerable(people)
.GroupJoin(pets,
person => person,
pet => pet.Owner,
(person, petCollection) => {
return {
Owner: person.Name,
Pets: asEnumerable(petCollection)
.Select(pet=> pet.Name)
.ToArray()
};
});
`
[See Example]
Using in browser
Browserified "standalone" UMD module is located in `/dist` directory and could be accessed through NPM CDN service. Both linq.js and linq.min.js are available.
Module is loaded with `` element:
`javascript
`
Loading this script creates `Enumerable` global variable. You can use it to perform LINQ queries:
`javascript
var count = Enumerable.asEnumerable( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] )
.Where(a => a % 2 == 1)
.Count()
`
[See Example]
Using in Angular 2
The same package could be used on a server as well as on the client. You have to install module as usual:
`
npm install linq-es2015 --save
`
Open `app.components.html` file and add element to hold calculated value:
`javascript
{{title}}
Count - {{count}}
`
and finally import `linq-es2015` in app.component.ts and do some calculations:
`javascript
import { Component } from '@angular/core';
import { asEnumerable } from 'linq-es2015';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
count: number;
constructor(){
this.count = asEnumerable([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).Where(a => a % 2 == 1)
.Count();
}
}
``