优秀的编程知识分享平台

网站首页 > 技术文章 正文

在JavaScript中使用LINQ:linq.js插件简介

nanyue 2024-07-20 23:54:40 技术文章 4 ℃

功能

  • 实现所有.NET 4.0的方法和许多额外的方法

  • 完成懒惰评估

  • 全面的IntelliSense支持VisualStudio

  • 两个版本 - linq.js和jquery.linq.js(jQuery插件)

  • 支持Windows Script Host

  • 绑定用于JavaScript(RxJS)和IntelliSense Generator的反向扩展

  • NuGet安装支持(linq.js, linq.js-jQuery, linq.js-Bindings)

90多个个方法

Aggregate, All, Alternate, Any, Average, BufferWithCount, CascadeBreadthFirst, CascadeDepthFirst, Catch, Choice, Concat,

Contains, Count, Cycle, DefaultIfEmpty, Distinct, Do, ElementAt, ElementAtOrDefault, Empty, Except, Finally, First, FirstOrDefault,

Flatten, ForEach, Force, From, Generate, GetEnumerator, GroupBy, GroupJoin, IndexOf, Insert, Intersect, Join, Last, LastIndexOf,

LastOrDefault, Let, Matches, Max, MaxBy, MemoizeAll, Min, MinBy, OfType, OrderBy, OrderByDescending, Pairwise, PartitionBy,

Range, RangeDown, RangeTo, Repeat, RepeatWithFinalize, Return, Reverse, Scan, Select, SelectMany, SequenceEqual, Share, Shuffle,

Single, SingleOrDefault, Skip, SkipWhile, Sum, Take, TakeExceptLast, TakeFromLast, TakeWhile, ThenBy, ThenByDescending, ToArray,

ToDictionary, ToInfinity,ToJSON, ToLookup, ToNegativeInfinity, ToObject, ToString, Trace, Unfold, Union, Where, Write, WriteLine, Zip

使用linq.js ver.3.0.0

NuGet Install-Package linq.js -Pre,linq.js-jQuery -Pre,linq.js-RxJS -Pre,linq.js-QUnit -Pre

Now TypeScript泛型支持

查询对象或JSON

var jsonArray = [

{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" },

{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" },

{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" },

{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" }

]

// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"]

var queryResult = Enumerable.From(jsonArray)

.Where(function (x) { return x.user.id < 200 })

.OrderBy(function (x) { return x.user.screen_name })

.Select(function (x) { return x.user.screen_name + ':' + x.text })

.ToArray();

// shortcut! string lambda selector

var queryResult2 = Enumerable.From(jsonArray)

.Where("$.user.id < 200")

.OrderBy("$.user.screen_name")

.Select("$.user.screen_name + ':' + $.text")

.ToArray();

CLinq兼容性高

// C# LINQ (delegate)

Enumerable.Range(1, 10)

.Where(delegate(int i) { return i % 3 == 0; })

.Select(delegate(int i) { return i * 10; });

// linq.js - anonymous function

Enumerable.Range(1, 10)

.Where(function(i) { return i % 3 == 0; })

.Select(function(i) { return i * 10; });

// C# LINQ (lambda)

Enumerable.Range(1, 10).Where(i => i % 3 == 0).Select(i => i * 10);

// linq.js - lambda expression

Enumerable.Range(1, 10).Where("i => i % 3 == 0").Select("i => i * 10");

// $ is default iterator variable like Scala's "_" or Groovy's "it"

Enumerable.Range(1, 10).Where("$ % 3 == 0").Select("$ * 10");

// "" is shorthand of "x => x" (identity function)

Enumerable.Range(4, 7).Join(Enumerable.Range(8, 5), "", "", "outer,inner=>outer*inner");

// Enumerable.From is wrap from primitive array, string(to charArray), object(to KeyValuePair[]) etc..

var array = [100, 200, 30, 40, 500, 40, 200];

var ex1 = Enumerable.From(array).Distinct().ToArray(); // [100, 200, 30, 40, 500]

var ex2 = Enumerable.From("foobar").ToArray(); // ["f", "o", "o", "b", "a", "r"];

var ex3 = Enumerable.From({foo:10, bar:20}).ToArray(); // [{Key:"foo",Value:10}, {Key:"bar",Value:20}]

// C# - AnonymousType

array.Select((val, i) => new { Value = val, Index = i });

// linq.js - object literal

Enumerable.From(array).Select("val,i=>{Value:val, Index:i}")

jQuery插件版本

// $.Enumerable

$.Enumerable.Range(1, 10).Where("$%2==0").ForEach("alert($)");

// TojQuery - Enumerable to jQuery

$.Enumerable.Range(1, 10)

.Select(function (i) { return $("<option>").text(i)[0] })

.TojQuery()

.appendTo("#select1");

// toEnumerable - jQuery to Enumerable

var sum = $("#select1").children()

.toEnumerable()

.Select("parseInt($.text())")

.Sum(); // 55



IntelliSense vsdoc

与Windows Script Host

// get folder name and file name...

var dir = WScript.CreateObject("Scripting.FileSystemObject").GetFolder("C:\\");

// normally

var itemNames = [];

for (var e = new Enumerator(dir.SubFolders); !e.atEnd(); e.moveNext())

{

itemNames.push(e.item().Name);

}

for (var e = new Enumerator(dir.Files); !e.atEnd(); e.moveNext())

{

itemNames.push(e.item().Name);

}

// linq.js

var itemNames2 = Enumerable.From(dir.SubFolders).Concat(dir.Files).Select("$.Name").ToArray();

最近发表
标签列表