C# LINQ的基本使用方法示例
LINQ是什么?
LINQ是LanguageIntegratedQuery(语言集成查询的缩写),微软官方对其的描述:
语言集成查询(LINQ)是一系列直接将查询功能集成到C#语言的技术统称。
基本用法是什么?
(我目前也只会最基本的用法。。)
LINQ查询操作由三个不同的操作组成:
- 获取数据源
- 创建查询
- 执行查询
下面我将用我学习时用的一个小例子来演示。
有两个数据源:武林高手的集合和武林绝学的集合。
我用的是两个集合,实际上不只是集合可以作为数据源
微软官方文档提到:
上例中,数据源是一个数组,因此它隐式支持泛型IEnumerable
说回我的例子,我实现了两个类:
MatialArtsMaster表示武林高手:
//武林高手 classMatialArtsMaster { publicintID{get;set;} publicstringName{get;set;} publicintAge{get;set;} publicstringMenpai{get;set;} publicstringKongfu{get;set;} publicintLevel{get;set;} publicoverridestringToString() { returnstring.Format("id:{0},name:{1},age:{2},menpai:{3},kongfu:{4},level:{5}",this.ID,this.Name,this.Age,this.Menpai,this.Kongfu,this.Level); } }
Kongfu表示武林绝学:
//武学 classKongfu { publicintId{get;set;} publicstringName{get;set;} publicintPower{get;set;} publicKongfu(){} publicKongfu(intid,stringname,intpower) { Id=id; Name=name; Power=power; } publicoverridestringToString() { returnstring.Format("Id:{0},Name:{1},Power:{2}",this.Id,this.Name,this.Power); } }
然后填充两个集合:
{ varMasterList=newList{ newMatialArtsMaster(){ID=001,Name="黄蓉",Age=18,Menpai="丐帮",Kongfu="打狗棒法",Level=9}, newMatialArtsMaster(){ID=002,Name="洪七公",Age=70,Menpai="丐帮",Kongfu="打狗棒法",Level=10}, newMatialArtsMaster(){ID=003,Name="郭靖",Age=22,Menpai="丐帮",Kongfu="降龙十八掌",Level=10}, newMatialArtsMaster(){ID=004,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花宝典",Level=1}, newMatialArtsMaster(){ID=005,Name="东方不败",Age=35,Menpai="明教",Kongfu="葵花宝典",Level=10}, newMatialArtsMaster(){ID=006,Name="林平之",Age=23,Menpai="华山",Kongfu="葵花宝典",Level=7}, newMatialArtsMaster(){ID=007,Name="岳不群",Age=50,Menpai="华山",Kongfu="岳不群",Level=8}, newMatialArtsMaster(){ID=008,Name="令狐冲",Age=23,Menpai="华山",Kongfu="独孤九剑",Level=10}, newMatialArtsMaster(){ID=009,Name="梅超风",Age=23,Menpai="梅花岛",Kongfu="九阴真经",Level=8}, }; varkungfuList=newList () { newKongfu(){Id=1,Name="打狗棒法",Power=90}, newKongfu(){Id=2,Name="降龙十八掌",Power=95}, newKongfu(){Id=3,Name="葵花宝典",Power=100}, newKongfu(){Id=4,Name="独孤九剑",Power=100}, newKongfu(){Id=5,Name="九阴真经",Power=100}, };
接下来就是查询了,基本的LINQ查询操作主要通过from,in,select,where关键字实现。例如:
查询修炼葵花宝典的武林高手:
varres=frommasterinMasterList wheremaster.Kongfu=="葵花宝典" selectmaster; foreach(vartempinres) { Console.WriteLine(temp.ToString()); } //id:4,name:任我行,age:50,menpai:明教,kongfu:葵花宝典,level:1 //id:5,name:东方不败,age:35,menpai:明教,kongfu:葵花宝典,level:10 //id:6,name:林平之,age:23,menpai:华山,kongfu:葵花宝典,level:7
查询所有武林高手的名字:
varres=frommasterinMasterList selectmaster.Name; foreach(vartempinres) { Console.WriteLine(temp.ToString()); } //黄蓉 //洪七公 //郭靖 //任我行 //东方不败 //林平之 //岳不群 //令狐冲 //梅超风
微软官方将from关键字后的那个变量称为范围变量:
范围变量就像foreach循环中的迭代变量,但查询表达式中不会真正发生迭代。当执行查询时,范围变量将充当对customers中每个连续的元素的引用。
这种写法写起来和SQL语句十分相似,逻辑功能也基本上一样,所以如果已经会SQL的话会很容易理解。
扩展方法
除了这样的标准写法,还可以通过数据源的扩展方法来实现LINQ查询。最简单易懂的一个方法是where()方法。
如要查询所有修炼等级大于8的武林高手:
varres=MasterList.Where(master=>master.Level>8); foreach(vartempinres) { Console.WriteLine(temp.ToString()); } //id:1,name:黄蓉,age:18,menpai:丐帮,kongfu:打狗棒法,level:9 //id:2,name:洪七公,age:70,menpai:丐帮,kongfu:打狗棒法,level:10 //id:3,name:郭靖,age:22,menpai:丐帮,kongfu:降龙十八掌,level:10 //id:5,name:东方不败,age:35,menpai:明教,kongfu:葵花宝典,level:10 //id:8,name:令狐冲,age:23,menpai:华山,kongfu:独孤九剑,level:10
扩展方法还有很多,如Select、SelectMany、Join和Orderby。他们的具体用法可参阅微软官方文档-扩展方法
)。
最后
LINQ是一项强大的技术,我才了解了一点点LINQ的知识(甚至可能还有错误,如果有请一定指正!),保持学习才是长久之道。
总结
到此这篇关于C#LINQ的基本使用方法的文章就介绍到这了,更多相关C#LINQ基本用法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。