• Linq to js使用方法汇总小结
  • 超级玛丽 发表于 2016/2/22 15:31:00 | 分类标签: linq linq框架
  • 1、什么是Linq to js :C# 3.0推出了.Net独有的新特性:Linq。自从有了Linq,程序员再也不用担心对集合的操作了。同理,Linq to js 当然也就是对前端集合变量进行操作的一种技术框架。
     

    2、怎么使用:因为是前端框架,所以你懂得,只需要引用一个js文件即可。这里还是附上官网地址:http://jslinq.codeplex.com/.这上面有文件和Demo,可以上去看看。使用方式主要有两种:使用方法一、直接引用js文件;使用方法二、使用Nuget Package 安装Linq to js。在PM安装控制台中输入Install-Package jslinq。

    本篇以Linq to js的lamada表达式写法的方式来以此介绍常用方法。我们从官网上面下载下载的文件如下图

    我们只需要引用linq.js文件即可。

    (1)条件查询:Where

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Where("x=>x.Name=='Jim'").ToArray();

    arrRes的结果为 [{"Name":"Jim","Age":20}]

    我们来看看这种写Lamada表达式的原型:

    var arrRes = Enumerable.From(myList).Where(function (i) { return i.Name=='Jim'; });

    参数i是对应的集合里面的实体模型,返回类型为bool类型。有没有和C#里面的扩展函数Where的定义很像:public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);参数Func<TSource, bool> predicate为匿名委托,需要传入实体模型TSource,然后返回值为bool类型。其实感觉linq to js的使用就是参照c#里面的定义来的。

    (2)条件选择:Select

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Select("x=>x.Age*10").ToArray();

    arrRes得到结果 [200,210,180,140,250]

    (3)排序、去重:OrderBy、Distinct

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 21 },
                { Name: "Lilei", Age: 18 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).OrderBy("x=>x.Age").ToArray();//降序OrderByDescending()

    得到的结果会按照Age排序。

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        var arrRes = Enumerable.From(myList).Distinct("x=>x.Age").ToArray();

    得到的结果集合的数量为3个:[ { Name: "Jim", Age: 20 }, { Name: "John", Age: 14 }, { Name: "LinTao", Age: 25 }]。

    (4)遍历:ForEach

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
        Enumerable.From(myList).ForEach(function(value, index){
             document.write("值="+value+",索引="+index);   
     });

    很显然两个参数:一个是值,另一个是当前索引

    (5)取唯一对象:First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault

    var myList = [
                { Name: "Jim", Age: 20 },
                { Name: "Kate", Age: 20 },
                { Name: "Lilei", Age: 20 },
                { Name: "John", Age: 14 },
                { Name: "LinTao", Age: 25 }
        ];
    
        var arrRes = Enumerable.From(myList).FirstOrDefault("x=>x.Age>18");

    其他几个用法和这个类似。这个没什么好说的。

    (6)Skip、Take

    Enumerable.Range(1,10).Skip(5)//结果[6,7,8,9,10]
    Enumerable.Range(1,10).Take(5)//结果[1,2,3,4,5]

    (7)取交集、取差集、合并

    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Except(array2)
    //结果3,412,1
    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Intersect(array2)
    //结果5,7
    var array1 = [1,412,5,3,5,412,7];
    var array2 = [20,12,5,5,7,310];
    Enumerable.From(array1).Union(array2)
    //结果是两个结果集里面所有值,并自动去重

    当然还有其他一些不常用的方法。有兴趣可以查看文档。其实linq to js还有一种支持jquery的写法。如下:

    Enumerable.Range(1,10).Where("$%2==0")
    //等价于
    Enumerable.Range(1,10).Where("x=>x%2==0")

    但引用文件的时候需要引用jquery.linq.js这个文件。就是写法不同,效果完全一样,选哪一种就是习惯问题了。博主更加倾向lamada方式的写法,因为和C#用法可以保持一致。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:超级玛丽
  • 加入时间:2013/6/13 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮