您好,登錄后才能下訂單哦!
本篇內容介紹了“Linq Lambda表達式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Linq Lambda表達式
許多標準查詢操作符在對序列執行運算時都使用 Func 委托來處理單個元素。Linq Lambda表達式可與標準查詢操作符結合使用以代表委托。Linq Lambda表達式是創建委托實現的簡略表達形式,并可用于匿名委托適用的所有場合。C# 和 Visual Basic® .NET 均支持 Linq Lambda表達式。但是,必須注意:由于 Visual Basic .NET 尚不支持匿名方法,Linq Lambda表達式可能僅包含一個語句。
讓我們來看看如何對一個整數數組使用 Single 操作符。這個整數數組的每個元素代表 2 的 1 到 10 次方。先創建此數組,然后使用 Single 操作符來檢索滿足 Linq Lambda表達式中指定條件的單個整數元素:
int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 }; int singleNum = nums.Single(x => x > 16 && x < 64); Console.WriteLine(singleNum.ToString());
Linq Lambda表達式包含多個關鍵部分。Linq Lambda表達式首先定義傳入委托的變量。在以上代碼示例中,x(在 => 操作符左側聲明)是參數,代表傳遞給它的 nums 數組中的每個元素。Linq Lambda表達式的剩余部分代表數組中每個元素的評估邏輯。可使用匿名委托輕松地重新編寫以上表達式,如下所示:
int singleNum = nums.Single<int>( delegate(int x) {return (x > 16 && x < 64); } ) ;
但是,此代碼的可讀性不及 Linq Lambda表達式。C# 2.0 引入了可使委托的傳遞稍微輕松些的匿名委托;但是,Linq Lambda表達式的簡潔語法可使其更加簡單。
First和Single
如果必須從序列中提取一個值,First、FirstOrDefault、Single 和 SingleOrDefault 操作符都非常有用。First 方法返回序列中的***個元素。First 有一個重載方法,可使用它來傳入 Linq Lambda表達式來代表一個條件。例如,如果要返回整數序列中整數元素大于 50 的***個元素,可使用以下代碼示例:
int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 }; int num1 = nums.First<int>(); int num2 = nums.First<int>(x => x > 50); int num3 = nums.FirstOrDefault<int>(x => x > 5000); Console.WriteLine( num1.ToString() + "-" + num2.ToString() + "-" + num3.ToString());
此代碼會查找***個元素 (1)、大于 50 的***個元素 (64) 以及大于 5,000 的***個元素。由于數組中沒有元素滿足第三個 Linq Lambda表達式(數組中無整數大于 5,000),則如果代碼使用的是 First 操作符而非 FirstOrDefault,則會引發異常。在使用 FirstOrDefault 操作符時,如果沒有元素滿足 Linq Lambda表達式,則會返回 0。First 操作符也可用于 LINQ to Entities 查詢,如下所示:
using (Entities entities = new Entities()) { var query = (from c in entities.Customers select c).First(c => c.City.Equals("London")); Console.WriteLine(query.CompanyName); }
在此示例中,將返回 London 城中的***個客戶。正如您所看到的,當 First 方法用于各種 LINQ 提供程序(在本例中為 LINQ to Objects 和 LINQ to Entities)時,所用的語法并不會更改。
“Linq Lambda表達式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。