c#中LINQ的基本用法(二)_第1页
c#中LINQ的基本用法(二)_第2页
c#中LINQ的基本用法(二)_第3页
c#中LINQ的基本用法(二)_第4页
c#中LINQ的基本用法(二)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第c#中LINQ的基本用法(二)varracers=racerNames.Zip(racerNamesAndStarts,(first,second)=first.Name+",starts:"+second.Starts);

foreach(varrinracers)

Console.WriteLine(r);

}

13.分区

扩展方法Take()和Skip()等的分区操作可用于分页。

例如,在第一页只显示5个赛车手,下一页显示接下来的5个赛车手...

Skip(page*pageSize)方法调到指定索引出,忽略前面的数据。Take(pageSize)方法显示pageSize条数据

intpageSize=5;

intnumberPages=(int)Math.Ceiling(Formula1.GetChampions().Count()/

(double)pageSize);

for(intpage=0;pagenumberPages;page++)

Console.WriteLine("Page{0}",page);

varracers=

(fromrinFormula1.GetChampions()

orderbyr.LastName,r.FirstName

selectr.FirstName+""+r.LastName).

Skip(page*pageSize).Take(pageSize);

foreach(varnameinracers)

Console.WriteLine(name);

Console.WriteLine();

}

TakeWhile()和SkipWhile()方法,传递一个委托,满足这个条件的数据就提取或跳转:

publicstaticIEnumerableTSourceSkipWhileTSource(thisIEnumerableTSourcesource,FuncTSource,boolpredicate);

14.聚合操作符

聚合操作符(如Count(),Sum(),Min(),Max(),Average(),Aggregate())不返回一个序列,而是返回一个值。

例如,使用Count方法应用于Racer的Years属性,筛选获得冠军次数超过3次的赛车手。因为多次使用r.Years.Count(),所以使用let子句定义了一个变量。

varquery=fromrinFormula1.GetChampions()

letnumberYears=r.Years.Count()

wherenumberYears=3

orderbynumberYearsdescending,r.LastName

selectnew

Name=r.FirstName+""+r.LastName,

TimesChampion=numberYears

foreach(varrinquery)

Console.WriteLine("{0}{1}",r.Name,r.TimesChampion);

}

Aggregate()方法传递一个委托,将数据源中的每个元素作为委托的参数,并使用指定的函数累加。

15.转换操作符

LINQ基础(一)(/article/244208.htm)提到,查询会推迟到迭代数据项时才执行,使用转换操作符会立即执行查询,把查询结果放在数组,列表和字典中。

//转换为数组

varnames=newListstring{"Nino","Alberto","Juan","Mike","Phil"};

varnamesWithJ=(fromninnames

wheren.StartsWith("J")

orderbyn

selectn).ToList();

转换为LookupTKey,TElement

//把Car赛车属性作为键,每个键关联多个车手Racer

varracers=(fromrinFormula1.GetChampions()

fromcinr.Cars

selectnew

Car=c,

Racer=r

}).ToLookup(cr=cr.Car,cr=cr.Racer);

foreach(varvinracers)

Console.Write(v.Key+"");

foreach(varkinracers[v.Key])

Console.WriteLine(k);

}

ToLookup(cr=cr.Car,cr=cr.Racer)方法的一个重载版本传递一个键和一个元素选择器

如果需要在非类型化的集合上使用LINQ查询,可以使用Cast()方法,定义强类型化的查询:

varlist=newSystem.Collections.ArrayList(Formula1.GetChampions()asSystem.Collections.ICollection);

varquery=fromrinlist.CastRacer()

wherer.Country=="USA"

orderbyr.Winsdescending

selectr;

foreach(varracerinquery)

Console.WriteLine("{0:A}",racer);

}

CastRacer()将System.Collections.IEnumerable的元素强制转换为指定的类型。

16.生成操作符

生成操作符Range(),Empty(),Repeat()方法不是扩展方法,而是返回序列的正常静态方法。在LINGtoObject中,这些方法可用于Enumerable类。

Range()方法用来填充一个范围的数字。第一个参数作为起始值,第二个参数作为要填充的项数:

varvalues=Enumerable.Range(1,20);

结果为1至20的集合。

可以把该结果与其它扩展方法合并:

varvalues=Enumerable.Range(1,20).Sel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论