C#高级学习第三章LINQ

来源:互联网 发布:ubuntu wq保存退出 编辑:程序博客网 时间:2024/06/07 04:00

LINQ查找:

using System.linq;

var res=from m in MasterList    from后面设置查询的集合

where m.Level>8 && m.MenPai=="丐帮"     where后面跟上查询的条件

select m;                                  表示m的结果集合返回

扩展方法的写法:

var res=MasterList.Where(m=>m.Level>8 && m.MenPai=="丐帮")     参数是一个返回值是bool,带一个相对应类型的参数的委托Func<MartialArtMaster,bool>,Lambda表达式


LINQ联合查询:

var res=from m in MasterList     查找大侠所学功夫的杀伤力大于95   联合查询是第一个集合的全部分别对应另一个集合的内容

from k in KongFuList

where m.Kongfu==k.Kongfu && k.Power>95

select m;   (select new{master=m,kongfu=k};)输出所有对应的集合的内容

扩展方法的写法(联合查询):

var res=masterList.SelectMany(m=>kongfuList,(m,k)=>new {master=m,kongfu=k}).Where(x=>x.master.Kongfu==x.Kongfu.Name && x.kongfu.Power>95)


对查询结果做排序:orderby(descending)

var res=from m in MasterList

where(m.Level>8 && m.MenPai=="MenPai")

orderby m.Level,m.Age      按照多个字段进行排序,如果字段的属性相当,就按照第二属性排序(从小到大,后面加上descending从大到小)

select m;

扩展方法排序:

var res=MasterList.Where(m=>m.Level>8 && m.MenPai=="丐帮").OrderBy(m=>m.Age) 以m.Age排序

var res=MasterList.Where(m=>m.Level>8 && m.MenPai=="丐帮").OrderBy(m=>m.Age).ThenBy(m=>m.Level);先以m.Age排序,在Age相同的情况下,在以Level排序


join on集合联合:

var res=from m in MasterList

join k in KongfuList on m.Kongfu equals k.Name     join后面加联合的集合,on后面加条件

where m.Level>8

select new{master=m,kongfu=k};

into Group分组查询(把武林高手按所学功夫分类,看哪一个功夫修炼人数最多)

var res=from k in KongfuList

join m in MasterList on k.Name equal m.Kongfu   

into groups                                后面的集合按前面的集合分组,必须符合多对一关系

orferby groups.Count()

select new {kongfu=k,count=groups.Count()};


按自身字段分组 group by

var res=from m in MasterList
group m by m.MenPai              在m集合中,以门派分组
into g                                        这一组就是g
select new{count=g.Count(),key=g.Key}     g.Key代表以哪个属性分的组

量词操作符 any all 判断集合中是否满足某个条件

bool res=MasterList.Any(m=>m.MenPai=="丐帮");  判断这个集合中有没有门派属于丐帮的,有则返回true

bool res=MasterList.All(m=>m.MenPai=="丐帮"); 判断这个集合中门派是否都是属于丐帮,是则返回true