前言:前面几篇介绍了下C#基础技术中的几个:反射、特性、泛型、序列化、扩展方法、Linq to Xml等,本来还有两三个知识点没有写完,比如委托、多线程、异步等,后面会陆续将它们补起来,以便作为一套完整的系列。之所以有这篇是因为目前BS项目中前端经常需要对Json的数组对象进行筛选、查找、判断是否存在等操作。这时就想到了好用的Linq。博主几年前用过Linq to js,那个时候还觉得那样写很别扭,于是没有重视。现在随着前段业务的越来越复杂,对前端的数据处理要求也越来越高,使用一种快捷的集合操作方式就变得越来越必要。今天正好趁系统升级Win 10,所以在此做个小结,以后也可以留着当文档使用。O(∩_∩)O~

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#用法可以保持一致。

  我把网上下载的文档传了一份到博客园上面:linq.js_ver2.2.0.2.rar

js----linq相关推荐

  1. UniRx - Unity响应式编程插件

    本文首发于"洪流学堂"公众号. 洪流学堂,让你快人几步!你好,我是你的技术探路者郑洪智,你可以叫我大智(vx: zhz11235). 本文译者:郑洪智 - 你的技术探路者 翻译日期 ...

  2. Web前端工作笔记002---json数据查询的方法_json查询大全,JsonSQL数据查询,jfunk数据查询

    JAVA技术交流QQ群:170933152 json数据查询的方法 网上看到有一篇帖子,有8种json数据查询的方法,大家可以研究一下,我现在分享一下! JsonSQL JsonSQL实现了使用SQL ...

  3. esayui-全国城市省市区三级级联

    基于easyUI的省市区三级级联,搜索资料后整理优化: 打包下载地址:http://download.csdn.net/download/qq_40841313/10266959 1.引入css.js ...

  4. 老衣的开发工具和类库集之2014版

    14年承诺朋友们公开自己常用的工具和类库集,一直没能及时兑现.今天忙里偷个闲,整理了一下清单,在此公布出来,希望能够对大家在.NET.App.Web等开发方面有所帮助.也当是给.NET开发者一个元宵礼 ...

  5. linq.js的用法

    linq.js 详细介绍 linq.js 是一个 JavaScript 实现的 LINQ. 主要特性: 实现所有 .NET 4.0 的方法 complete lazy evaluation full ...

  6. linq to js使用汇总

    用途:方便js操作查询json数据. 下载网址:http://jslinq.codeplex.com/ 使用方法:只需要引用linq.js即可. 查询方法: 一.where查询 var myList ...

  7. NET问答: JS 中有 LINQ SelectMany 方法的等价实现吗?

    咨询区 toddmo: 很遗憾,我在 Underscore 和 Jquery 中都没有找到对等实现,我的要求很简单,只要能做到 IE9 兼容即可. 我的 SelectMany 实现如下: // Sel ...

  8. linq结果转换object_19.07.26 JS 里的数据类型转换amp;普通类型和对象的区别

    JS 里的数据类型转换 JS一共有七种数据类型,分别是: 基本数据类型:数值(number).字符串(string).布尔(boolean).null.undefined和symbol. 复杂数据类型 ...

  9. edge.js架起node.js和.net互操作桥梁

    今天要介绍的是edge.js这个github上刚兴起的开源项目,它可以让node.js和.net之间在in-process下互操作..net版本在4.5及以上,因为.net4.5带来的Task,asy ...

  10. vue.js crud_如何使用VS Code和ADO.NET使用ASP.NET Core执行CRUD操作

    vue.js crud 介绍 (Introduction) In this article we are going to create a web application using ASP.NET ...

最新文章

  1. P2000 拯救世界
  2. strictmath_Java StrictMath log10()方法与示例
  3. 匈牙利命名法的优缺点
  4. linux mysql 磁盘空间_磁盘空间满了之后MySQL会怎样
  5. C++高级编程篇-如何编写高效的C++篇
  6. linux命令大全(持续更新)
  7. “十亿赌约”,雷军输,董明珠胜?
  8. Atlas与面向对象的Javascript
  9. html文本添加超链接就换行,HTML - SegmentFault 思否
  10. 获取微信小程序源代码教程
  11. 编程语言c语言vb,c语言和vb语言哪个比较简单
  12. cad汉仪长仿宋体_长仿宋体字体下载 cad工程机械绘图工程制图国标字体下载
  13. Egg.js框架的简单使用
  14. 二进制转换八进制图解_二进制如何转换成八进制?
  15. 视频教程-Visio应用视频教程(下)-Office/WPS
  16. VUP无法打开报0xc0150002错误
  17. html学习——按钮与多选框
  18. 践行快乐音乐教育 郎朗The ONE全球公益钢琴盛典传递音乐力量!
  19. 大会回顾丨游戏用户体验优化如何实践,看大咖怎么说(附PPT下载)
  20. 如何将低dpi图片升级到300dpi

热门文章

  1. 数字化“下沉”,持续赋能中小企业
  2. xv-6 EX(学习路径 超全总结 持续更新中)
  3. Win32编程实现剪贴板监控查看
  4. 快速 Building ONL 网络操作系统 X86 平台image
  5. php无限极分类 退出,PHP实现无限极分类图文教程
  6. 小程序存入手机号码到通讯录
  7. 后端发送给前端雪花算法生成的Long类型Id 前端接收Id与发送的Id不匹配
  8. 搜狗地图孔祥来谈开放API和地图服务
  9. Java面向对象相对于面向过程的优势?以及java创建对象的4中方式?
  10. Spring Ioc/DI 控制反转和依赖注入