LINQ教程之使用Lambda表達(dá)式
C#3.0(.NET3.5)中引入了Lambda表達(dá)式和LINQ。Lambda表達(dá)式是使用一些特殊語法表示匿名方法的較短方法。
一、最基本的Lambda表達(dá)式語法如下:
(參數(shù)列表)=>{方法體}
說明:
1、參數(shù)列表中的參數(shù)類型可以是明確類型或者推斷類型。
2、如果是推斷類型,則參數(shù)的數(shù)據(jù)類型將由編輯器根據(jù)上下文自動(dòng)推斷出來。
讓我們看看Lambda表達(dá)式是如何從匿名方法演變而來的。
相關(guān)示例:
delegate(int item) { return item % 2 == 0; };1、Lambda表達(dá)式從匿名方法演變,首先刪除delegate關(guān)鍵字和參數(shù)類型并添加Lambda運(yùn)算符=>,演變后的代碼如下:
(item)=>{return item % 2 == 0;};2、如果我們只有一個(gè)返回值的語句,那么我們不需要花括號(hào)、返回和分號(hào),所以我們可以去掉這些符號(hào),演變后的代碼如下:
(item)=>item %2 == 0;
3、如果我們只有一個(gè)參數(shù),我們也可以刪除(),代碼如下:
item=>item %2 == 0;
因此,我們得到如下所示的Lambda表達(dá)式:
item => item % 2 == 0
其中item是參數(shù),=>是Lambda運(yùn)算符,item % 2 == 0是正文表達(dá)式。
二、具有多個(gè)參數(shù)的Lambda表達(dá)式
如果需要傳遞多個(gè)參數(shù),那么必須將參數(shù)括在括號(hào)內(nèi),如下所示:
(ints, item) => ints.Contains(item);
如果不想使用推斷類型,那么可以給出每個(gè)參數(shù)的類型,如下所示:
(int[] ints, int item) => ints.Contains(item)
三、不帶任何參數(shù)的Lambda表達(dá)式
在Lambda表達(dá)式中可以沒有參數(shù),如下所示:
() => Console.WriteLine("這是一個(gè)不帶任何參數(shù)的Lambda表達(dá)式");四、正文表達(dá)式中有多條語句
在前面講過,如果正文表達(dá)式有一個(gè)語句,那么可以去掉方法體外面的大括號(hào)。如果正文表達(dá)式中有多條語句,那么必須用大括號(hào)將正文表達(dá)式括起來,如下所示:
(ints, item) =>
{
Console.WriteLine("這是包含多條語句的Lambda表達(dá)式");
return ints.Contains(item);
};五、表達(dá)式中的局部變量
你可以在表達(dá)式的主體中聲明一個(gè)變量,以便在表達(dá)式主體的任何位置使用它,如下所示:
ints =>
{
int item = 10;
return ints.Contains(item);
};六、Lambda表達(dá)式中的內(nèi)置泛型委托
1、Func委托
當(dāng)你想從lambda表達(dá)式返回一些東西時(shí),使用Func <> delegate。

其中T是輸入?yún)?shù)的類型,TResult是返回類型。
示例代碼如下:
Func<int[], bool> isContains = p => p.Equals(10);
int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
bool isEquals = isContains(ints);在上面的例子中,F(xiàn)unc委托期望第一個(gè)輸入?yún)?shù)是int[]類型,返回類型是boolean。Lambda表達(dá)式是p => p.Equals(10)。
2、Action委托
與Func委托不同,Action委托只能有輸入?yún)?shù)。 當(dāng)不需要從lambda表達(dá)式返回任何值時(shí),請(qǐng)使用Action委托類型。
示例代碼如下:
Action<int[]> PrintItem = p =>
{
foreach (int item in p)
{
Console.WriteLine(item);
}
};
int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
PrintItem(ints);七、在LINQ中使用Lambda表達(dá)式
通常情況下,Lambda表達(dá)式與LINQ查詢一起使用。枚舉靜態(tài)類包括接受Func <TSource,bool>的IEnumerable <T>的Where擴(kuò)展方法。IEnumerable <Int>集合的Where()擴(kuò)展方法需要傳遞Func <Student,bool>,如下所示:

現(xiàn)在,您可以將分配給Func委托的lambda表達(dá)式傳遞給方法語法中的Where()擴(kuò)展方法,如下所示:
Func<int, bool> isContains = p =>p.Equals (4);
int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 };
var result = ints.Where(isContains).ToList();八、Lambda表達(dá)式要點(diǎn)總結(jié)
1、Lambda表達(dá)式是一種表示匿名方法的更短的方法。
2、Lambda表達(dá)式語法:parameters =>正文表達(dá)式
3、Lambda表達(dá)式可以在()中具有零個(gè)或多個(gè)參數(shù)。
4、Lambda表達(dá)式可以在大括號(hào){}中的正文表達(dá)式中有一條或多條語句。
5、Lambda表達(dá)式可以分配給Func,Action或Predicate委托。
6、Lambda表達(dá)式可以以類似的方式調(diào)用委托。
到此這篇關(guān)于LINQ使用Lambda表達(dá)式的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET?MVC實(shí)現(xiàn)本地化和全球化
這篇文章介紹了ASP.NET?MVC實(shí)現(xiàn)本地化和全球化的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
.net?core中高效的動(dòng)態(tài)內(nèi)存管理方案
這篇文章介紹了.net?core中高效的動(dòng)態(tài)內(nèi)存管理方案,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
Asp.net Socket客戶端(遠(yuǎn)程發(fā)送和接收數(shù)據(jù))
通過Socket遠(yuǎn)程發(fā)送與接收數(shù)據(jù)的代碼類2008-11-11
ASP.Net中英文復(fù)合檢索文本框?qū)崿F(xiàn)思路及代碼
前段時(shí)間,寫一個(gè)用戶部門的管理頁面,需要對(duì)后臺(tái)獲取的用戶數(shù)據(jù)實(shí)現(xiàn)英漢檢索功能于是就有了下文,編輯的很詳細(xì)圖文并茂呢?感興趣的你可不要錯(cuò)過了哈,或許本文對(duì)你有所幫助呢2013-02-02
ASP.NET Core MVC/WebApi基礎(chǔ)系列1
這篇文章主要介紹了ASP.NET Core MVC/WebApi基礎(chǔ)系列,后續(xù)會(huì)穿插講EF Core和ASP.NET Core,雖說是基礎(chǔ)系列但也是也有你不知道的。2019-04-04
asp.net DropDownList實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果
這篇文章主要介紹了asp.net DroDownList實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果的相關(guān)資料,需要的朋友可以參考下2016-02-02
ASP.NET 頁面刷新的實(shí)現(xiàn)方法(包括html,js)
ASP.NET 頁面刷新的實(shí)現(xiàn)方法,比較全了, 包括html與js下的實(shí)現(xiàn)方法。2010-03-03
ASP.NET 頁面刷新和定時(shí)跳轉(zhuǎn)代碼整理
很多是摘網(wǎng)上的但是我整理了一下。以便以后查閱。2009-12-12
Visual Studio Debugger七個(gè)鮮為人知的小功能
這篇文章主要為大家詳細(xì)介紹了Visual Studio Debugger七個(gè)鮮為人知的小功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

