.NET LINQ functions for JavaScript written in TypeScript.
Queryable<T>
,which is reusable, variable and uses a predicate collection for deferred execution.Promise
as an input source.APIs
are JavaScript native methods so can be easily incorporated into existing JavaScript projects.Firebase Realtime database
).npm install linq-fns --save
Browser client files can be found in the release folder.
// ES6
import { Queryable } from 'linq-fns';
// ES5
const Queryable = require('linq-fns').Queryable;
let query = Queryable
.from(nations)
.join(continents, (x, y) => x.areaId === y.id)
.groupBy(o => o.y.areaName)
.select(x => {
return {
area: x.key,
total: Queryable.fromSync(x.items).count()
// This will return a number, not Promise<number>
}
})
// Async/ await
const data = await query.toList();
// Promise
// Will return Promise<{area:string, total:number}>
const asyncData = query.toList();
asyncData.then(data => {
console.log(data);
// [
// {area: 'Euro': total: 2},
// {area:'South America', total: 1}
// ]
});
const FireBaseQueryable = require('linq-fns').FireBaseQueryable;
const admin = require('firebase-admin');
const serviceAccount = require('./serviceAccountKey');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://xxx.firebaseio.com'
});
const db = admin.database();
const postsRepo = new FireBaseQueryable(db,'<yourdb>.posts');
// READ AND QUERY DATA
// ES5 Promise
postsRepo.getQuery()
.where('...')
.select('...')
.toList().then(x=>'...');
// Async/await
const data = await postsRepo.getQuery()
.where('...')
.select('...')
.toList();
// WRITE DATA
// Prepare calls, but do not send requests to server
postsRepo.add(item);
postsRepo.remove(item);
postsRepo.update(item);
// Call this to execute 3 above methods
postsRepo.commitChanges();
// Node
const LocalStorageQueryable = require('linq-fns').LocalStorageQueryable;
const postsRepo = new LocalStorageQueryable("posts");
postsRepo.add(item);
postsRepo.remove(item);
postsRepo.update(item);
// Call this to execute 3 above methods
postsRepo.commitChanges();
//Node
const GistQueryable = require('linq-fns').GistQueryable;
const postsRepo = new GistQueryable(
"6d183b7f997819cd5a8354f35c1e471f123", // gist file
"259f97b96762c9d3a155630d12321fd1cfaf253ff", // access token
"posts") // table name
postsRepo.add(item);
postsRepo.remove(item);
postsRepo.update(item);
postsRepo.commitChanges();
Promise<T>
Promise<T | null>
Promise<T>
Promise<T | null>
Promise<boolean>
Promise<boolean>
Promise<number>
Promise<number>
Promise<number>
Promise<number>
Promise<T[]>
Node
Node
& Browser
Node
& Browser
https://github.com/jinhduong/linq-fns/tree/docs