详解LINQ to JavaScript的几种方法

开发 后端
本文将为大家介绍LINQ to JavaScript的几种方法,希望通过本文能对大家用好数据链接有所帮助。

LINQ TO SQL概述

LINQ TO SQL是LINQ技术在数据库方面的应用。数据库技术从OLEDB,ODBC到ADO,在到ADO.NET到现在的LINQ TO SQL,让程序员操作数据库越来越简单。

LINQ TO JAVASCRIPT概述

LINQ TO  JAVASCRIPT 宗旨就是代码风格像 LINQ TO SQL 一样操作数据。

LINQ TO  JAVASCRIPT 数据格式为 JSON (JavaScript Object Notatio)

那我们看看  linq to javascript 是怎么做的

首先,我们先准备静态数据做为演示用。

var Samples = {};  
Samples.People = [  
        { ID: 1, FirstName: "Chris", LastName: "Pearson", BookIDs: [8008, 1002, 1003] },  
        { ID: 2, FirstName: "Chris", LastName: "Johnson", BookIDs: [2001, 2002, 2003] },  
        { ID: 3, FirstName: "Josh", LastName: "Sutherland", BookIDs: [3001, 3002, 3003] },  
        { ID: 4, FirstName: "John", LastName: "Ronald", BookIDs: [4001, 4002, 4003] },  
        { ID: 5, FirstName: "Steve", LastName: "Pinkerton", BookIDs: [1001, 1002, 1003] },  
        { ID: 6, FirstName: "Katie", LastName: "Zimmerman", BookIDs: [2001, 2002, 2003] },  
        { ID: 7, FirstName: "Dirk", LastName: "Anderson", BookIDs: [3001, 3002, 3003] },  
        { ID: 8, FirstName: "Chris", LastName: "Stevenson", BookIDs: [4001, 4002, 4003] },  
        { ID: 9, FirstName: "Bernard", LastName: "Sutherland", BookIDs: [1001, 2002, 3003] },  
        { ID: 10, FirstName: "Kate", LastName: "Pinkerton", BookIDs: [4001, 3002, 2003] }  
    ]; 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

 核心代码我们加到了YUI 里

YUI.add('LINQ', function(Y) {  
 // core code  
},'3.1.1'); 
  • 1.
  • 2.
  • 3.

用Where关键字查询

var db = Y.LINQ(Samples.People)  
.Where(function(item){return item.FirstName == 'Chris';}) 
  • 1.
  • 2.

会返回三条数据

{items => [{ID => 1, FirstName => Chris, LastName => Pearson, BookIDs => [8008, 1002, 1003]}, 
{ID => 2, FirstName => Chris, LastName => Johnson, BookIDs => [2001, 2002, 2003]}, 
{ID => 8, FirstName => Chris, LastName => Stevenson, BookIDs => [4001, 4002, 4003]}]}  
Select  
 var db = Y.LINQ(Samples.People)  
               .Where(function(item){return item.FirstName == 'Chris';})  
               .Select(function(item){return item.FirstName;}) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

返回结果

语句中指定了返回 FirstName  所以返回 {items => [Chris, Chris, Chris]}

Intersect

第一个结果集

var test2 = Y.LINQ(Samples.People)  
.Where(function(item){return item.FirstName != 'Chris';}); 
  • 1.
  • 2.

返回是

{items => [{ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},   
{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]},  
 {ID => 5, FirstName => Steve, LastName => Pinkerton, BookIDs => [1001, 1002, 1003]},   
{ID => 6, FirstName => Katie, LastName => Zimmerman, BookIDs => [2001, 2002, 2003]},   
{ID => 7, FirstName => Dirk, LastName => Anderson, BookIDs => [3001, 3002, 3003]},  
 {ID => 9, FirstName => Bernard, LastName => Sutherland, BookIDs => [1001, 2002, 3003]},  
 {ID => 10, FirstName => Kate, LastName => Pinkerton, BookIDs => [4001, 3002, 2003]}]} 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第2个结果集

var test = Y.LINQ(Samples.People)  
.Where(function(item){return item.ID < 5;})  
.Intersect(test2) 
  • 1.
  • 2.
  • 3.

先取出所有ID小于5的数据,然后再返回和test2数据集相交的部分

返回结果

{items => [{ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},   
{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]}]} 
  • 1.
  • 2.

只返回3,4两条数据了 ,因为名字不等于Chris 并且 ID < 5的 就只有2条数据 : )

 OrderBy / OrderByDescending  
var test = Y.LINQ(Samples.People)  
.Where(function(item){return item.ID < 5;})  
.OrderByDescending(function(item){return item.ID})  
  • 1.
  • 2.
  • 3.
  • 4.

 按指定表达式对集合倒序排序,这里我们用ID排序

返回结果:

{items => [{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]},  
 {ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},   
{ID => 2, FirstName => Chris, LastName => Johnson, BookIDs => [2001, 2002, 2003]},   
{ID => 1, FirstName => Chris, LastName => Pearson, BookIDs => [8008, 1002, 1003]}]} 
  • 1.
  • 2.
  • 3.
  • 4.
var test = Y.LINQ(Samples.People)  
.Where(function(item){return item.ID < 5;})  
.OrderBy(function(item){return item.ID}) 
  • 1.
  • 2.
  • 3.

 按指定表达式对集合正序排序,这里我们用ID排序

返回结果:

{items => [{ID => 1, FirstName => Chris, LastName => Pearson, BookIDs => [8008, 1002, 1003]},   
{ID => 2, FirstName => Chris, LastName => Johnson, BookIDs => [2001, 2002, 2003]},   
{ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},   
{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]}]} 
  • 1.
  • 2.
  • 3.
  • 4.

Skip

跳过几条数据

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .OrderBy(function(item){return item.ID})  
                    .Skip(0); 
  • 1.
  • 2.
  • 3.
  • 4.

返回结果:

{items => [{ID => 2, FirstName => Chris, LastName => Johnson, BookIDs => [2001, 2002, 2003]},   
{ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},  
 {ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]}]} 
  • 1.
  • 2.
  • 3.

从结果看,我们的数据集跳过了第一条数据

Delete

删除

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .OrderBy(function(item){return item.ID})  
                    .Skip(0)  
                    .Delete(function(item){return item.ID == 2;}) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

返回结果:

{items => [{ID => 3, FirstName => Josh, LastName => Sutherland, BookIDs => [3001, 3002, 3003]},   
{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]}]} 
  • 1.
  • 2.

Min  / Max / Average / Sum

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .OrderBy(function(item){return item.ID})  
                    .Skip(0)  
                    .Delete(function(item){return item.ID == 2;})  
                    .Min(function(item){return item.ID;}) 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

沿用上面结果集,Min取最小值

最后返回结果 3 ,其他关键字用法相同 : )

First  / Last

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .First(); 
  • 1.
  • 2.
  • 3.

返回首行数据

{ID => 1, FirstName => Chris, LastName => Pearson, BookIDs => [8008, 1002, 1003]} 
  • 1.
var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .Last(); 
  • 1.
  • 2.
  • 3.

返回末行数据

{ID => 4, FirstName => John, LastName => Ronald, BookIDs => [4001, 4002, 4003]} 
  • 1.

Take

取前几条数据

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .Take(2); 
  • 1.
  • 2.
  • 3.

取了前2条数据,返回结果

{items => [{ID => 1, FirstName => Chris, LastName => Pearson, BookIDs => [8008, 1002, 1003]},   
{ID => 2, FirstName => Chris, LastName => Johnson, BookIDs => [2001, 2002, 2003]}]} 
  • 1.
  • 2.

Count

返回结果的总个数

var test = Y.LINQ(Samples.People)  
                    .Where(function(item){return item.ID < 5;})  
                    .Count(); 
  • 1.
  • 2.
  • 3.

返回结果 4 ,正确的  ID小于5的 数据刚好是4条 : )

SelectMany  / Any / All / ElementAt /  Distinct ...... 等等 就不一一介绍了

[[11601]]

原文标题:LINQ TO JAVASCRIPT 

链接:http://www.cnblogs.com/windows7/archive/2010/06/03/1750431.html

【编辑推荐】

  1. Linq匿名类型简单概述
  2. Linq随机读取数据浅析
  3. Linq Lambda表达式全面分析
  4. Linq扩展方法简单分析
  5. 初探Linq局部变量类型
责任编辑:彭凡 来源: 博客园
相关推荐

2020-08-24 08:05:47

JavaScriptJavaScript 页面

2009-09-09 11:24:46

PHP实现MVC

2020-10-16 18:35:53

JavaScript字符串正则表达式

2009-09-01 18:35:53

C#判断文件存在

2021-11-05 21:36:59

JavaScript语言开发

2013-08-21 11:31:21

iPhone图片方法

2009-09-18 12:29:55

2010-05-17 15:17:06

MySQL常用操作

2020-01-10 16:23:44

Springboot停止服务Java

2011-06-16 10:48:33

session

2021-02-26 13:20:48

Shell空行Linux

2009-08-31 09:19:31

c#隐藏窗口

2010-10-26 09:23:03

Web Service

2010-01-22 14:46:25

C++语言

2010-04-30 16:22:07

Unix终端

2021-03-08 09:32:04

Python文件命令

2009-07-20 17:07:30

提高ASP.NET性能

2015-10-12 11:06:36

Web前端0.5像素

2022-02-17 09:12:55

MySQL数据库设置变量

2012-12-05 13:54:54

点赞
收藏

51CTO技术栈公众号