Linq中的TakeWhile和SkipWhile
类别:编程学习 浏览量:498
时间:2015-4-9 Linq中的TakeWhile和SkipWhile
Linq中的TakeWhile和SkipWhileLinq中的SkipWhile
1、含义
(1)、对数据源进行枚举,从第一个枚举得到的元素开始,调用客户端的predicate
(2)、如果返回true,则跳过该元素,继续进行枚举操作.
(3)、但是,如果一旦predicate返回为false,则该元素以后的所有元素,都不会再调用predicate,而全部枚举给客户端.
2、实现
public static IEnumerable<TSource> SkipWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
return SkipWhileIterator<TSource>(source, predicate);
}
private static IEnumerable<TSource> SkipWhileIterator<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
bool iteratorVariable0 = false;
foreach (TSource iteratorVariable1 in source)
{
if (!iteratorVariable0 && !predicate(iteratorVariable1)) iteratorVariable0 = true;
if (iteratorVariable0)
{
yield return iteratorVariable1;
}
}
}
3、实例
int[] grades = { 59, 82, 70, 56, 92, 98, 85 };
IEnumerable<int> lowerGrades =
grades
.OrderByDescending(grade => grade)
.SkipWhile(grade => grade >= 80);
Console.WriteLine("All grades below 80:");
foreach (int grade in lowerGrades)
{
Console.WriteLine(grade);
}
/*
This code produces the following output:
All grades below 80:
70
59
56
*/
二、Linq中的TakeWhile
1、含义
(1)、对数据源进行枚举,从第一个枚举得到的元素开始,调用客户端传入的predicate( c.Name == ""woodyN")
(2)、如果这个predicate委托返回true的话,则将该元素作为Current元素返回给客户端,并且,继续进行相同的枚举,判断操作.
(3)、但是,一旦predicate返回false的话,MoveNext()方法将会返回false,枚举就此打住,忽略剩下的所有元素.
2、实例
string[] fruits = { "apple", "banana", "mango", "orange",
"passionfruit", "grape" };
IEnumerable<string> query =
fruits.TakeWhile(fruit => String.Compare("orange", fruit, true) != 0);
foreach (string fruit in query)
{
Console.WriteLine(fruit);
}
/*
This code produces the following output:
apple
banana
mango
*/
三、通过一个实例说明Linq中的TakeWhile和SkipWhile的区别
static List<Customer> customers = new List<Customer> {
new Customer { CustomerID=1,Name="woody1"},
new Customer { CustomerID=2,Name="woody2"},
new Customer { CustomerID=3,Name="woody3"},
new Customer { CustomerID=4,Name="woody1"}
};
var cs1 = customers.TakeWhile(c => c.Name == "woody1");
var cs2 = customers.TakeWhile(c => c.Name == "woody2");
var cs3 = customers.SkipWhile(c => c.Name == "woody1");
var cs4 = customers.SkipWhile(c => c.Name == "woody2");
cs1--cs4的结果
cs1 : woody1(CustomerID=1)
cs2 : 没有任何元素
cs3 : woody2 , woody3 , woody1(CustomerID=4)
cs4 : woody1(CustomerID=1),woody2,woody3,woody1(CustomerID=4)
标签:Linq
您可能感兴趣
- list使用linq排序
- Linq操作Datable
- linq distinct去重
- linq 数据类型转换
- linq not in 查询
- linq中group by
- linq 排序
- linq中let
- Linq中where查询
- LINQ中Aggregate的用法
- linq xml 查询
- 如何查看linq生成的sql
- linq to sql 中Concat、Union、Intersect、Except
- Linq中的TakeWhile和SkipWhile
- Linq中select查询
- 使用 LINQPad 调试linq以及lambda表达式
- 幼小衔接-20以内看图读数 写数 数的组成练习题(幼小衔接-20以内看图读数)
- 你只要花上20天记单词,英语成绩就能从57提到100(你只要花上20天记单词)
- 夕云天际飞,亢龙化太极(夕云天际飞亢龙化太极)
- 爱情可以当饭吃吗(怎么回复)
- 高考数学题(高考数学题基础题占多少分)
- 没钱只能吃土(没钱要吃土了幽默短信发朋友圈)
热门推荐
- docker同步宿主机配置(docker容器间跨宿主机通信-基于overlay的实现方法)
- python的解释器怎么安装其他版本(在Python文件中指定Python解释器的方法)
- pjs计算方式(JS代码编译器Monaco使用方法)
- dedecms更改主页模板(dedecms首页调用专题页描述和链接的实现方法)
- vue加载html5动画(vue实现旋转木马动画)
- js音乐脚本怎么做(js实现网页音乐播放器)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- python3语法规则(Python3解释器知识点总结)
- mysql数据库触发器(MySQL中使用游标触发器的方法)
- MySQL中interactive_timeout和wait_timeout