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#用法可以保持一致。
转自:http://blog.csdn.net/tianlianchao1982/article/details/55251402