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; }
}
}
查看全文
相关阅读:
Git: fatal: Pathspec is in submodule
cnpm不是内部或外部命令 cnpm: command not found
kubectl top查看k8s pod的cpu , memory使用率情况
Docker 技巧:删除 Docker 所有镜像
Docker 快速删除所有容器
使用Dockerfile文件构建基于centOS系统的nodejs镜像
CentOS下nodejs最简单的安装方法
yum安装nodejs 8
系统空间占用排查 tomcat超大日志catalina.out 删除 与df 状态更新
用dockerfile构建基于centos系统的jar包的镜像
原文地址:https://www.cnblogs.com/qfb620/p/1116014.html
最新文章
python安全编程
python之pack布局
PHP5全版本绕过open_basedir读文件脚本
PHP文件包含漏洞总结
微信小程序-下拉松开弹不回去顶部留一段空白
微信小程序图片宽100%显示并且不变形
DockerToolbox在Win7上的安装和设置
微信小程序:冒泡事件及其阻止
小程序获取当前页面路径及参数
微信小程序 confirm(删除提示)提示框,询问框,小程序操作成功提示后跳转
热门文章
国内高速下载Docker 以及 docker-compose 地址
windowns 2008(apache2.2.25 x86 openssl0.98y) 升级openssl1.0.1e(为了支持小程序接口TLS1.2)
微信小程序之顶部固定和底部固定
js日期操作,某天的N天后,一个月后的日期
C#对.zip 存档读取和写入【转】
DWG/DGN格式导入Arcgis;转化为shp格式;更改地理坐标;导入Google Earth【转】
Fisheye projections from spherical maps [转]
Computer Generated Angular Fisheye Projections [转]
Converting a fisheye image into a panoramic, spherical or perspective projection [转]
城市级海量数据流畅调度方案(初稿)
Copyright © 2011-2022 走看看