zoukankan
html css js c++ java
Linq 入门系列 [Take,Skip,TakeWhile,SkipWhile]篇
/**/
//////////////////////////////////////////
/
/
Take,Skip,TakeWhile,SkipWhile的例子和解释
//
/**/
//////////////////////////////////////////
class
Program
{
DB
#region
DB
private
static
List
<
Student
>
GetStudents()
{
List
<
Student
>
students
=
new
List
<
Student
>
{
new
Student
{ Name
=
"
YOUNG
"
, Age
=
25
, Language
=
"
Chinese
"
}
,
new
Student
{ Name
=
"
JESSIE
"
, Age
=
21
, Language
=
"
Scotland
"
}
,
new
Student
{ Name
=
"
KELLY
"
, Age
=
18
, Language
=
"
English
"
}
,
new
Student
{ Name
=
"
JUNE
"
, Age
=
20
, Language
=
"
Chinese
"
}
,
new
Student
{ Name
=
"
ADRIAN
"
, Age
=
22
, Language
=
"
Italy
"
}
,
new
Student
{ Name
=
"
BRUCE
"
, Age
=
17
, Language
=
"
Scotland
"
}
,
new
Student
{ Name
=
"
BRANT
"
, Age
=
30
, Language
=
"
Germany
"
}
,
new
Student
{ Name
=
"
BEN
"
, Age
=
25
, Language
=
"
Chinese
"
}
}
;
return
students;
}
#endregion
static
void
Main(
string
[] args)
{
List
<
Student
>
studentList
=
GetStudents();
//
Take(studentList);
//
Skip(studentList);
}
Take
#region
Take
public
static
void
Take
<
T
>
(T obj)
{
//
GetElementFromCollect();
//
GetElementFromSelectResult(obj);
//
GetPointElement(obj);
//
ForExampleAboutTakeWhileOrSkipWhile(obj);
}
private
static
void
GetElementFromCollect()
{
Console.WriteLine(
"
<hr>从集合中取固定数量的元素:<br>
"
);
string
[] stringArray
=
{
"
Ajax
"
,
"
Csharp
"
,
"
Javascript
"
,
"
Css Desige
"
,
"
Asp.net
"
,
"
Gis
"
}
;
//
Take将枚举出source中的前count个元素,返回给客户端.
//
Lambda的写法
//
var books = stringArray.Take(3);
//
Linq的写法
var books
=
(from n
in
stringArray
select n).Take(
3
);
foreach
(var book
in
books)
{
Console.WriteLine(
string
.Format(
"
<div class='result'>{0}</div>
"
, book));
}
//
扩展方法写法
//
IEnumerator<String> stu_Lambda = stringArray.Take(3).GetEnumerator();
//
while (stu_Lambda.MoveNext())
//
{
//
Console.WriteLine(stu_Lambda.Current);
//
}
}
private
static
void
GetElementFromSelectResult
<
T
>
(T obj)
{
Console.WriteLine(
"
<hr>从select结果中取固定数量的元素:<br>
"
);
//
Lambda写法
//
var stu = (RevealChangeType(obj).Where(n=>n.Language == "Chinese").Select(n=>new { n.Name, n.Age })).Take(1);
//
Linq写法
var stu
=
(from n
in
RevealChangeType(obj)
where n.Language
==
"
Chinese
"
select
new
{n.Name, n.Age}
).Take(
1
);
foreach
(var student
in
stu)
{
Console.WriteLine(
string
.Format(
"
<div class='result'> name:{0}; age:{1}</div>
"
, student.Name, student.Age));
}
//
扩展方法写法
//
IEnumerator<Student> stu_ExtraMethod = RevealChangeType(obj).Where(n=>n.Language == "Chinese").Take(1).GetEnumerator();
//
while (stu_ExtraMethod.MoveNext())
//
{
//
Console.WriteLine(stu_ExtraMethod.Current.Age);
//
}
}
private
static
void
GetPointElement
<
T
>
(T obj)
{
Console.WriteLine(
"
<hr>取满足指定条件元素:<br>
"
);
//
Lambda写法
//
var stu = RevealChangeType(obj).TakeWhile(student => student.Age > 20);
//
Linq写法
var stu
=
(from n
in
RevealChangeType(obj)
select n).TakeWhile(n
=>
n.Age
>
20
);
foreach
(var student
in
stu)
{
Console.WriteLine(
string
.Format(
"
<div class='result'>{0}</div>
"
, student.Name));
}
//
扩展方法写法
//
IEnumerator<Student> stu_ExtraMethod = RevealChangeType(obj).TakeWhile(student => student.Age > 20).GetEnumerator();
//
while (stu_ExtraMethod.MoveNext())
//
{
//
Console.WriteLine(stu_ExtraMethod.Current.Name);
//
}
//
TakeWhile在LINQ中实现的思想是:
//
对数据源进行枚举,从第一个枚举得到的元素开始-->
//
调用客户端传入的predicate( c.Name == ""woodyN")-->
//
如果这个predicate委托返回true的话,
//
则将该元素作为Current元素返回给客户端,并且,继续进行相同的枚举,判断操作.
//
但是,一旦predicate返回false的话,
//
MoveNext()方法将会返回false,枚举就此打住,忽略剩下的所有元素.
//
所以此方法出来的结果是:
//
<div class='result'>YOUNG</div>
//
<div class='result'>JESSIE</div>
//
因为在KELLYAge=18不符合当前where条件,所以会这样。:)
}
#endregion
Skip
#region
Skip
private
static
void
Skip
<
T
>
(T obj)
{
//
GetRemnantElementAfterJumpCollect();
//
GetRemnantElementAfterFilter(obj);
}
private
static
void
GetRemnantElementAfterJumpCollect()
{
Console.WriteLine(
"
<hr>跳过集合的几个元素后取剩余所有元素:<br>
"
);
string
[] stringArray
=
{
"
Ajax
"
,
"
Csharp
"
,
"
Javascript
"
,
"
Css Desige
"
,
"
Asp.net
"
,
"
Gis
"
}
;
//
Skip则恰好相反,将跳过source中的前count个元素,枚举其余元素.
//
Lambda写法
//
var books1 = stringArray.Skip(3);
//
Linq写法
var books1
=
(from n
in
stringArray
select n).Skip(
3
);
foreach
(var book
in
books1)
{
Console.WriteLine(
string
.Format(
"
<div class='result'>{0}</div>
"
, book));
}
//
扩展方法写法
//
IEnumerator<string> books1_ExtraMethod = stringArray.Skip(3).GetEnumerator();
//
while (books1_ExtraMethod.MoveNext())
//
{
//
Console.WriteLine(books1_ExtraMethod.Current);
//
}
}
private
static
void
GetRemnantElementAfterFilter
<
T
>
(T obj)
{
Console.WriteLine(
"
<hr>将满足指定条件元素过滤后选择剩余的所有元素:<br>
"
);
//
Lambda写法
//
var stu = RevealChangeType(obj).SkipWhile(student => student.Age > 20);
//
Linq写法
var stu
=
(from n
in
RevealChangeType(obj)
select n).SkipWhile(n
=>
n.Age
>
20
);
foreach
(var student
in
stu)
{
Console.WriteLine(
string
.Format(
"
<div class='result'>{0}</div>
"
, student.Name));
}
//
扩展方法写法
//
IEnumerator<Student> stu_ExtraMethod = RevealChangeType(obj).SkipWhile(student => student.Age > 20).GetEnumerator();
//
while (stu_ExtraMethod.MoveNext())
//
{
//
Console.WriteLine(stu_ExtraMethod.Current);
//
}
//
类似的,SkipWhile也对数据源进行枚举,从第一个枚举得到的元素开始,
//
调用客户端的predicate,如果返回true,则跳过该元素,继续进行枚举操作.
//
但是,如果一旦predicate返回为false,则该元素以后的所有元素,都不会再调用predicate,
//
而全部枚举给客户端.
//
所以此方法出来的结果是:
//
<div class='result'>KELLY</div>
//
<div class='result'>JUNE</div>
//
<div class='result'>ADRIAN</div>
//
<div class='result'>BRUCE</div>
//
<div class='result'>BRANT</div>
//
<div class='result'>BEN</div>
//
以上根据这个结果对于linq中TakeWhile,SkipWhile有点认识了。
//
但是我还是建议实际使用时还是要小心使用。
}
#endregion
TakeWhile--SkipWhile
#region
TakeWhile--SkipWhile
private
static
void
ForExampleAboutTakeWhileOrSkipWhile
<
T
>
(T obj)
{
var stu
=
RevealChangeType(obj).TakeWhile(student
=>
student.Age
>
20
);
var stu1
=
RevealChangeType(obj).TakeWhile(student
=>
student.Age
>
18
);
var stu2
=
RevealChangeType(obj).SkipWhile(student
=>
student.Age
>
20
);
var stu3
=
RevealChangeType(obj).SkipWhile(student
=>
student.Age
>
18
);
foreach
(var student
in
stu)
{
Console.WriteLine(
string
.Format(
"
<div class='[TakeWhile(student => student.Age > 20)]result'>{0}</div>
"
, student.Name));
}
foreach
(var student
in
stu1)
{
Console.WriteLine(
string
.Format(
"
<div class='[TakeWhile(student => student.Age > 18)]result'>{0}</div>
"
, student.Name));
}
foreach
(var student
in
stu2)
{
Console.WriteLine(
string
.Format(
"
<div class='[SkipWhile(student => student.Age > 20)]result'>{0}</div>
"
, student.Name));
}
foreach
(var student
in
stu3)
{
Console.WriteLine(
string
.Format(
"
<div class='[SkipWhile(student => student.Age > 18)]result'>{0}</div>
"
, student.Name));
}
//
Runtime Result
//
<div class='[TakeWhile(student => student.Age > 20)]result'>YOUNG</div>
//
<div class='[TakeWhile(student => student.Age > 20)]result'>JESSIE</div>
//
<div class='[TakeWhile(student => student.Age > 18)]result'>YOUNG</div>
//
<div class='[TakeWhile(student => student.Age > 18)]result'>JESSIE</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>KELLY</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>JUNE</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>ADRIAN</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>BRUCE</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>BRANT</div>
//
<div class='[SkipWhile(student => student.Age > 20)]result'>BEN</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>KELLY</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>JUNE</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>ADRIAN</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>BRUCE</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>BRANT</div>
//
<div class='[SkipWhile(student => student.Age > 18)]result'>BEN</div>
}
#endregion
}
sealed
class
Student
{
public
int
age;
public
int
Age
{
get
{
return
age; }
set
{ age
=
value; }
}
private
string
name;
public
string
Name
{
get
{
return
name; }
set
{ name
=
value; }
}
private
string
language;
public
string
Language
{
get
{
return
language; }
set
{ language
=
value; }
}
}
查看全文
相关阅读:
oracle 存储过程的基本语法
Silverlight :服务器返回错误: NotFound 错误
利用CSS定位背景图片 backgroundposition
解决 asp.net 伪静态 IIS设置后 直正HTML无法显示的问题
输入框下拉列表提示
同步文本框内容的JS代码
判断文本框只能输入中文汉字的代码
如何解决padding标记在ie7、ie6以及firefox中的兼容问题
ASP.NET用URLRewriter.dll实现伪静态
滑动效果,适合做faq或menu
原文地址:https://www.cnblogs.com/qfb620/p/1116014.html
最新文章
Core Dump?!
Me vs Myself
行走世间,全是妖怪
有线网卡Linux驱动安装小记
回归“哥白尼原则”
WebDAV简介
"Can't We Talk?" (condensed from: You Just Don't Understand)
synatics触摸板的详细设置
Silverlight学习资料汇总
JavaScript学习资料收集
热门文章
Silverlight3之动画
关于一个Silverlight3的小项目总结
jquery选择器
Oracle exp命令常用用法
iframe连接对应页控制外部iframe大小
在网上转的一个鼠标右键弹出菜单,挺好的,兼容性不知道。。。
2010.8.7 感情日记
转的Silverlight的一些图像处理方法..不单是silverlight
百度知道上面关于WCF的比喻
web treeview点击修改,添加,删除(仿windows重命名)
Copyright © 2011-2022 走看看