C# LINQ的基本使用方法示例
LINQ是什么?
LINQ是Language Integrated Query(語(yǔ)言集成查詢(xún)的縮寫(xiě)), 微軟官方 對(duì)其的描述:
語(yǔ)言集成查詢(xún) (LINQ) 是一系列直接將查詢(xún)功能集成到 C# 語(yǔ)言的技術(shù)統(tǒng)稱(chēng)。
基本用法是什么?
(我目前也只會(huì)最基本的用法。。)
LINQ查詢(xún)操作由三個(gè)不同的操作組成:
- 獲取數(shù)據(jù)源
- 創(chuàng)建查詢(xún)
- 執(zhí)行查詢(xún)
下面我將用我學(xué)習(xí)時(shí)用的一個(gè)小例子來(lái)演示。
有兩個(gè)數(shù)據(jù)源:武林高手的集合和武林絕學(xué)的集合。
我用的是兩個(gè)集合,實(shí)際上不只是集合可以作為數(shù)據(jù)源
微軟官方文檔提到:
上例中,數(shù)據(jù)源是一個(gè)數(shù)組,因此它隱式支持泛型IEnumerable<T> 接口。 這一事實(shí)意味著該數(shù)據(jù)源可以用 LINQ 進(jìn)行查詢(xún)。
說(shuō)回我的例子,我實(shí)現(xiàn)了兩個(gè)類(lèi):
MatialArtsMaster 表示武林高手:
//武林高手 class MatialArtsMaster { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Menpai { get; set; } public string Kongfu { get; set; } public int Level { get; set; } public override string ToString() { return string.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 表示武林絕學(xué):
//武學(xué) class Kongfu { public int Id { get; set; } public string Name { get; set; } public int Power { get; set; } public Kongfu() { } public Kongfu(int id, string name, int power) { Id = id; Name = name; Power = power; } public override string ToString() { return string.Format("Id:{0},Name:{1},Power:{2}", this.Id, this.Name, this.Power); } }
然后填充兩個(gè)集合:
{ var MasterList = new List<MatialArtsMaster> { new MatialArtsMaster(){ID=001,Name="黃蓉",Age=18,Menpai="丐幫",Kongfu="打狗棒法",Level=9}, new MatialArtsMaster(){ID=002,Name="洪七公",Age=70,Menpai="丐幫",Kongfu="打狗棒法",Level=10}, new MatialArtsMaster(){ID=003,Name="郭靖",Age=22,Menpai="丐幫",Kongfu="降龍十八掌",Level=10}, new MatialArtsMaster(){ID=004,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花寶典",Level=1}, new MatialArtsMaster(){ID=005,Name="東方不敗",Age=35,Menpai="明教",Kongfu="葵花寶典",Level=10}, new MatialArtsMaster(){ID=006,Name="林平之",Age=23,Menpai="華山",Kongfu="葵花寶典",Level=7}, new MatialArtsMaster(){ID=007,Name="岳不群",Age=50,Menpai="華山",Kongfu="岳不群",Level=8}, new MatialArtsMaster(){ID=008,Name="令狐沖",Age=23,Menpai="華山",Kongfu="獨(dú)孤九劍",Level=10}, new MatialArtsMaster(){ID=009,Name="梅超風(fēng)",Age=23,Menpai="梅花島",Kongfu="九陰真經(jīng)",Level=8}, }; var kungfuList = new List<Kongfu>() { new Kongfu(){Id=1,Name="打狗棒法",Power=90}, new Kongfu(){Id=2,Name="降龍十八掌",Power=95}, new Kongfu(){Id=3,Name="葵花寶典",Power=100}, new Kongfu(){Id=4,Name="獨(dú)孤九劍",Power=100}, new Kongfu(){Id=5,Name="九陰真經(jīng)",Power=100}, };
接下來(lái)就是查詢(xún)了,基本的LINQ查詢(xún)操作主要通過(guò) from , in , select , where 關(guān)鍵字實(shí)現(xiàn)。例如:
查詢(xún)修煉 葵花寶典 的武林高手:
var res = from master in MasterList where master.Kongfu == "葵花寶典" select master; foreach(var temp in res) { 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
查詢(xún)所有武林高手的名字:
var res = from master in MasterList select master.Name; foreach(var temp in res) { Console.WriteLine(temp.ToString()); } //黃蓉 //洪七公 //郭靖 //任我行 //東方不敗 //林平之 //岳不群 //令狐沖 //梅超風(fēng)
微軟官方將 from 關(guān)鍵字后的那個(gè)變量稱(chēng)為 范圍變量 :
范圍變量就像 foreach 循環(huán)中的迭代變量,但查詢(xún)表達(dá)式中不會(huì)真正發(fā)生迭代。 當(dāng)執(zhí)行查詢(xún)時(shí),范圍變量將充當(dāng)對(duì) customers 中每個(gè)連續(xù)的元素的引用。
這種寫(xiě)法寫(xiě)起來(lái)和SQL語(yǔ)句十分相似,邏輯功能也基本上一樣,所以如果已經(jīng)會(huì)SQL的話(huà)會(huì)很容易理解。
擴(kuò)展方法
除了這樣的標(biāo)準(zhǔn)寫(xiě)法,還可以通過(guò)數(shù)據(jù)源的擴(kuò)展方法來(lái)實(shí)現(xiàn)LINQ查詢(xún)。最簡(jiǎn)單易懂的一個(gè)方法是 where() 方法。
如要查詢(xún)所有修煉等級(jí)大于8的武林高手:
var res = MasterList.Where(master => master.Level > 8); foreach(var temp in res) { 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: 獨(dú)孤九劍,level: 10
擴(kuò)展方法還有很多,如 Select 、 SelectMany 、 Join 和 Orderby 。他們的具體用法可參閱微軟官方文檔-擴(kuò)展方法
)。
最后
LINQ是一項(xiàng)強(qiáng)大的技術(shù),我才了解了一點(diǎn)點(diǎn)LINQ的知識(shí)(甚至可能還有錯(cuò)誤,如果有請(qǐng)一定指正!),保持學(xué)習(xí)才是長(zhǎng)久之道。
總結(jié)
到此這篇關(guān)于C# LINQ的基本使用方法的文章就介紹到這了,更多相關(guān)C# LINQ基本用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#檢測(cè)pc光驅(qū)里是否插入了光盤(pán)的方法
這篇文章主要介紹了C#檢測(cè)pc光驅(qū)里是否插入了光盤(pán)的方法,涉及C#針對(duì)光驅(qū)等硬件檢測(cè)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07協(xié)定需要會(huì)話(huà),但是綁定“BasicHttpBinding”不支持它或者因配置不正確而無(wú)法支持它
在IIS7及以上版本服務(wù)器中提供了基于WAS的無(wú).SVC文件的WCF服務(wù)激活功能,能夠提供基于HTTP和非HTTP協(xié)議的訪(fǎng)問(wèn),通過(guò)添加Windows Server AppFabric可以更方便的管理WCF服務(wù)2012-12-12C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式
這篇文章介紹了C#基于自定義事件EventArgs實(shí)現(xiàn)發(fā)布訂閱模式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#使用String和StringBuilder運(yùn)行速度測(cè)試及各自常用方法簡(jiǎn)介
今天小編就為大家分享一篇關(guān)于C#使用String和StringBuilder運(yùn)行速度測(cè)試及各自常用方法簡(jiǎn)介,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Visual Studio連接unity編輯器的實(shí)現(xiàn)步驟
unity編輯器中打開(kāi)C#腳本的時(shí)候發(fā)現(xiàn)Visual Studio沒(méi)有連接unity編輯器,本文主要介紹了Visual Studio連接unity編輯器的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-11-11C#算法之無(wú)重復(fù)字符的最長(zhǎng)子串
這篇文章介紹了C#算法之無(wú)重復(fù)字符的最長(zhǎng)子串,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01