zoukankan      html  css  js  c++  java
  • linqjs

    Project Description
    linq.js - LINQ for JavaScript

    Features

    • implement all .NET 4.0 methods and many extra methods (inspiration from RxAchiral, Haskell, Ruby, etc...)
    • complete lazy evaluation
    • full IntelliSense support for VisualStudio
    • two versions - linq.js and jquery.linq.js (jQuery plugin)
    • support Windows Script Host
    • binding for Reactive Extensions for JavaScript(RxJS) and IntelliSense Generator -> see documentation
    • NuGet install support(linq.jslinq.js-jQuerylinq.js-Bindings)


    90 Methods

    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

    Starting linq.js ver.3.0.0-beta!(2012/07/19)

    Get the ver.3.0.4-Beta5 @2013/06/20
    or NuGet Install-Package linq.js -Pre, linq.js-jQuery -Pre, linq.js-RxJS -Pre, linq.js-QUnit -Pre
    Now TypeScript Generics(0.9) support!

    Please try it! and give me a feedback!
    http://linqjs.codeplex.com/discussions/376207

    Query objects or json

    • sample from http://twitter.com/statuses/public_timeline.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();
    

    High compatibility with C# Linq

    // 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 plugin version

    // $.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
    


    linq-jquery.jpg

    IntelliSense vsdoc

    linqjs_intellisense.jpg

    video - using with Visual Studio 2010



    video - how to debug linq.js

    with 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();
    原文链接:https://archive.codeplex.com/?p=linqjs
  • 相关阅读:
    【python】PyQt5 QAction 添加点击事件
    【环境搭建】安装pyQt5 在pycharm报This application failed to start because no Qt platform plugin could be initialized的问题
    【嵌入式】arduino IDE串口监视器可以正常使用但其他软件发送串口指令没有反应的问题
    【操作系统】bat文件 系统找不到文件路径
    十天冲刺:第二天
    十天冲刺:第一天
    项目需求分析NABCD电梯演讲
    项目需求分析与建议-NABCD模型
    团队开发之团队介绍
    会议1.7
  • 原文地址:https://www.cnblogs.com/coce/p/8644123.html
Copyright © 2011-2022 走看看