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] ), 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.
Install module with this command:
npm install linq-es2015 --save
Once installed it could be loaded and used like this:
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()
};
});
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 <script>
element:
<script type="text/javascript" src="//unpkg.com/linq-es2015/dist/linq.min.js"></script>
Loading this script creates Enumerable
global variable. You can use it to perform LINQ queries:
var count = Enumerable.asEnumerable( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] )
.Where(a => a % 2 == 1)
.Count()
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:
<h1>{{title}}</h1>
<div>Count - {{count}}</div>
and finally import linq-es2015
in app.component.ts and do some calculations:
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();
}
}