1. 程式人生 > >LINQ與擴充套件方法

LINQ與擴充套件方法

What
LinQ是什麼?
      英文全稱Language Integrated Query,中文翻譯為語言整合查詢。它是一組用於語言的擴充套件,它通過編寫程式碼以查詢資料庫相同的方式操作記憶體資料。

      LINQ的查詢操作是比較有特色也比較常用的,但它也有相關的增刪改的操作。

Why & How
       遍歷物件、sql語句用的好好的,為什麼又引進LINQ?

或許是初學者,好不容易可以掌握sql語句進行增刪改查的操作,或許是被固有的思維綁住,使得我們無法跳出圈子,去審視它的優缺點。sql語句肯定有它的缺點,我們先來看個小例子。

         //程式碼功能:輸出陣列中所有比50大的數
            int[] arr = { 123, 23, 3, 4, 56, 65, 34, 567 };
            //獲取大於50的數
            ArrayList result = new ArrayList();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] > 50)
                {
                    result.Add(arr[i]);
                }
            }

            //打印出結果
            for (int i = 0; i < result.Count; i++)
            {

                Console.WriteLine( result[i].ToString());
            }

       看上面的例子,確實沒有太大的問題。條件是大於50的數,那麼我們就遍歷陣列進行比較,然後再遍歷輸出滿足的數。如果這個例子用LINQ語句來做,就簡單多了。
 //獲取大於50的數
            IEnumerable ie=arr.Select(p => p).Where(p=>p>50);
            //輸出要求結果
            IEnumerator result= ie.GetEnumerator();
            while (result.MoveNext())
            {
                
                Console.WriteLine(result.Current.ToString());
            }

          這裡,先忽略LINQ的語法,簡單對比兩種實現方式可以看出:

      LINQ語句獲取大於50的數只用了一行程式碼,而且輸出語句也是可以複用的。能夠大大減少了程式碼量,提高了程式碼的可讀性和可維護性。簡單瞭解了LINQ的優點,接下來就是如何使用了。

——擴充套件方法

       說到LINQ的使用,就要提到擴充套件方法。沒有擴充套件方法,就沒有LINQ。

       LINQ主要分為三部分:LINQ to Objects(物件查詢),LINQ to XML,LINQ to ADO.NET(資料庫查詢)。這裡,我們舉一個在物件查詢中的例子,來介紹擴充套件方法。在例子中,我們要把一串大小寫胡亂的字串轉化為Pascal規範(首字母大寫,其餘小寫)。

      顯然,在類的方法中沒有我們需要的這個方法,這就需要我們自己來寫了。

 //擴充套件類,靜態
        public static class ExtraClass
        {
            public static string ToPascal(this string s){
                return s.Substring(0,1).ToUpper()+s.Substring(1).ToLower();

            }
        }

         擴充套件方法是在靜態類中定義的,是一種特殊的靜態方法。     

       有了擴充套件方法,就可以呼叫它了。

 private void btnExtraMethod_Click(object sender, EventArgs e)
        {
            //擴充套件方法
            string s = "dfgdf";
            //Console.WriteLine(s.ToUpper()); 
            //Console.WriteLine(s.ToLower());
            Console.WriteLine(s.ToPascal());
        
        }

      我們可以通過方法前的符號來識別擴充套件方法,如下圖:


       擴充套件方法,顧名思義,它是擴充套件而來的方法。它的目的是對現有類提供額外的方法,以增強該類的功能。

       它的缺點也十分明顯。擴充套件方法的優先順序低於同名類方法,且只在特定的名稱空間內有效。擴充套件方法具有“汙染性”,濫用擴充套件方法會使得很多類產生無關的方法。

小結:擴充套件方法是一種特殊的靜態方法,通過它我們可以給類定義額外的方法,增加類的功能。同樣,它的這個作用也帶來了負面影響——“汙染性”。LINQ就是用於語言的擴充套件,沒有擴充套件方法LINQ就無從談起

相關推薦

LINQ擴充套件方法

What LinQ是什麼?       英文全稱Language Integrated Query,中文翻譯為語言整合查詢。它是一組用於語言的擴充套件,它通過編寫程式碼以查詢資料庫相同的方式操作記憶體

C#.NET:高階程式設計之匿名類、匿名方法擴充套件方法

 [文中插圖丟失,推薦檢視原文]!important 開篇:在上一篇中,我們瞭解了自動屬性、隱式型別、自動初始化器等所謂的新語法,這一篇我們繼續征程,看看匿名類、匿名方法以及常用的擴充套件方法。雖然,都是很常見的東西,但是未必我們都明白其中蘊含的奧妙。所以,跟著本篇的

.NET中那些所謂的新語法之二:匿名類、匿名方法擴充套件方法

開篇:在上一篇中,我們瞭解了自動屬性、隱式型別、自動初始化器等所謂的新語法,這一篇我們繼續征程,看看匿名類、匿名方法以及常用的擴充套件方法。雖然,都是很常見的東西,但是未必我們都明白其中蘊含的奧妙。所以,跟著本篇的步伐,繼續來圍觀。 /* 新語法索引 */ 一、匿名類:[ C# 3.0/.NET 3.

JQuery 外掛擴充套件方法的範例

前言   如今做web開發,jquery 幾乎是必不可少的,就連vs神器在2010版本開始將Jquery 及ui 內建web專案裡了。至於使用jquery好處這裡就不再贅述了,用過的都知道。今天我們來討論下jquery的外掛機制,jquery有著成千上萬的第三方外掛,

Sunshinelinq擴充套件方法

Sunshine擴充套件方法 1:asp.net mvc request值對應到model Price_Port p = Request.RequestToModel<Price_Port>(); 2:更具數字分組 List<Price_Port_

【轉】Python基礎-封裝擴充套件、靜態方法和類方法

【轉】Python基礎-封裝與擴充套件、靜態方法和類方法 一、封裝與擴充套件 封裝在於明確區分內外,使得類實現者可以修改封裝內的東西而不影響外部呼叫者的程式碼;而外部使用者只知道一個介面(函式),只要介面(函式)名、引數不變,使用者的程式碼永遠無需改變。這就提供一個良好的合作基礎——或者說,只要介面這個基

dux主題的使用方法擴充套件

DUX主題我應該用了兩年。不定期更新一、自帶功能:1.程式碼高亮,在需要程式碼高亮的地方,切換到文字,並且將程式碼用下面的方式包起來:<pre class="prettyprint linenums">Your code.</pre>如果不顯示行號,請將class中的linenums去

C#高階程式設計六十一天----LINQ中的擴充套件方法

LINQ中的擴充套件方法 LINQ中where擴充套件方法,要想使用,必須匯入using System.Linq;我們看一下這個方法的宣告: public static IEnumerable<TSource > Where<TSource>(thi

C# 的擴充套件方法LINQ 中實現陣列排序

       首先定義一個數組,int[] a = { 3,1,2,4},我們要簡單的實現該陣列的排序,但是a陣列是System空間下的,沒有OrderBy()之類的方法,這是我們引入名稱空間usin

陣列去重的六種方法擴充套件

方法一: function unique11(arr){ arr.sort(function(a,b){return a-b;}); var result=[];

LINQ自帶的擴充套件方法

閱讀目錄 GroupBy分組查詢 Where條件篩選。 Select()查詢 join( ) 連表查詢 OrderBy排序 Skip,Take分頁(LINQ:使用Take和Skip實現分頁)’ Distinct去重複 GroupBy分組查詢 //學生表

Linq多條件查詢優化---使用擴充套件方法

  寫在演算法前:最近在做SQL多條件查詢,感覺自己寫查詢邏輯太過麻煩。比如,假如有一個查詢條件,就需要分析兩種情況(空條件和一個條件);兩個條件就要四中情況;三個條件,8種情況.......      這樣是不是也太麻煩了?!下面這種方法可以為你簡化很多步驟,一起來看看吧

使用Linq擴充套件方法時容易忽略的小問題

問題重現 下面直接給出用於說明文章主題的完整程式碼。 //************************************************************ // // Linq擴充套件方法示例程式碼 // // Au

C# Linq擴充套件方法應用

Linq中存在大量的擴充套件方法。在System.Linq名稱空間中,存在兩個使用極其廣泛的類Enumerable和Queryable,它們中就含有許許多多的擴充套件方法。擴充套件方法最重要的用途之

Linq入門——什麼是linq & 擴充套件方法

 一,什麼是Linq              linq(language integrated Query):語言整合查詢;      linq包含如下:      

.NET中擴充套件方法和Enumerable(System.Linq)

LINQ是我最喜歡的功能之一,程式中到處是data.Where(x=x>5).Select(x)等等的程式碼,她使程式碼看起來更好,更容易編寫,使用起來也超級方便,foreach使迴圈更加容易,而不用for int..,linq用起來那麼爽,那麼linq內部是如何實現的?我們如何自定義linq?我們這裡

Linq中帶有迭代索引的Select擴充套件方法,為啥知道的人不多呢?

一:背景 昨天在看C#函數語言程式設計這本書的時候,有一處讓我乾著急,需求是這樣: 給多行文字加上數字列表項。 針對這個需求你會如何快捷高效的給每個專案加上數字編號呢? 我看書中是這樣實現的,如下程式碼 public class Program { public stat

Linq 下的擴充套件方法太少了,您期待的 MoreLinq 來啦

## 一:背景 ### 1. 講故事 前幾天看同事在用 linq 給記憶體中的兩個 model 做左連線,用過的朋友都知道,你一定少不了一個叫做 `DefaultIfEmpty` 函式,這玩意吧,本來很流暢的 from...in...join, 突然搞進來這麼一個函式,真的是噁心他媽給噁心開門,噁心到

Lua中的元表方法

類型 得到 算術 自己的 連接 還記得 clas 是否 操作符 前言Lua中每一個值都可具有元表。 元表是普通的Lua表,定義了原始值在某些特定操作下的行為。你可通過在值的原表中設置特定的字段來改變作用於該值的操作的某些行為特征。比如。當數字值作為加法的操作數時,Lua檢

zabbix   監控平臺搭建過程中的報錯解決方法總結

監控 zabbix 運維自動化1.php option post_max_size 2.php option max_execution_time 3.php option max_input_time 4.php time zone 5.php bcm