亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

LINQ查詢基礎

2024-07-21 02:45:17
字體:
來源:轉載
供稿:網友

LINQ 語言集成查詢(Language INtegrated Query)作為.net平臺的一項查詢技術,給我們的開發帶來了極大地方便。本人用2.0的平臺時間較長,對LINQ用的不是太多。LINQ查詢的數據源:實現IEnumberable<T>接口的對象、關系數據庫、數據集(DataSets)以及xml文檔。最近偶使用到它,談談一下使用基礎與體會。

   LINQ與T-Sql語法類似,有一些數據庫基礎的理解它應該不難。下面主要從我使用到的幾個函數等來進行說明。

  1、Except

  2、Cast

  3.  Take、TakeWhile

  4、Skip、SkipWhile

  5、Lambda表達式基礎

  首先,還是從最基本的查詢語法說起。由于LINQ查詢結果是IEnumerable<T>,接收返回結果時定義為var比較簡潔。最基本的查詢語法為:from [parameters]  in [dataSource] select [result].示例代碼和截圖還是最直接:

#代碼

 int[] arr1 = new int[] {1, 2, 3, 4, 5};

            int[] arr2 = new int[] {1, 2, 5, };

            var result = from a in arr1

                         join b in arr2 on a equals b into list

                         from r in list

                         select r;

            foreach(var v in result)

            {

                Console.WriteLine(v.ToString());

            }

輸出結果如下:

 

 

以上的查詢是將兩個集合中相同的元素查出來,放入到list中,然后再從list中進行查詢。

 

在Select中,也可以自定義需要選擇的結果。如需要找出兩個集合中相同元素的長度,代碼如下:

string[] list1 = new string[] {"ab", "bc", "abd", "aaaa"};
            string[] list2 = new string[] { "ab",  "abd", "aabb","bb" };

            var query = from s in list1
                        join m in list2 on s equals m
                        select new {s.Length};
                        foreach( var len in query)
                        {
                            Console.WriteLine(len.Length);
                        }

輸出結果如下:

2,3

 

在查詢時候用判斷元素相等用的是equals,而不是編程語言中的"=="或者T-SQL中的"=",有點特別。

1、Except:返回查詢兩個集合中差異的元素。

    var dif = arr1.Except(arr2);
            foreach (var item in dif)
            {
                Console.WriteLine(item);
            }

這樣dif就包含3,4兩個元素

2、Cast:對數據源中元素進行類型轉化,轉化的目標類型為Cast指定的泛型。

  Console.WriteLine("Cast************");

            object[] obj = new object[] {1,2,3};

            var intResult = obj.Cast<int>();

            foreach( var item in intResult)

            {

                Console.WriteLine("item :{0}",item.GetType().ToString());

                Console.WriteLine(item);

            }

輸出如下:

 

3.  Take、TakeWhile:Take(int i)從數據源起始位置返回指定數量的個數。如果指定的參數為-1,則返回為0,若指定的參數大于數據源的個數,則返回全部數據。TakeWhile需要指定委托來實現獲取元素.它有兩個重載。一個參數的委托MSDN給出的解釋如下:

【此方法通過使用延遲執行實現。即時返回值為一個對象,該對象存儲執行操作所需的所有信息。只有通過直接調用對象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)來枚舉該對象時,才執行此方法表示的查詢。

TakeWhile<(Of <(TSource>)>)(IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Boolean>)>)) 方法使用 PRedicate 對 source 中的每個元素進行測試,如果結果為 true,則生成該元素。當謂詞函數對某個元素返回 false 或 source 中不再包含元素時,枚舉將停止?!?/P>

兩個參數的委托第一個參數表示要測試的元素。第二個參數表示 source 中元素的從零開始的索引

注意其中標紅的部分:意思就是說,TakeWhile會枚舉集合中的元素,通過委托的函數進行操作。但是如果中途某個元素返回false后將停止對集合中后續的元素繼續枚舉,并且返回的結果中包含的元素為返回False前取出的所有元素。當然當枚舉完集合時,肯定也會停止繼續枚舉。

int[] arr1 = {10, 1, 2, 3, 4, 5};

IEnumerable<int> query = arr1.TakeWhile(Compare);

這樣query中只包含10一個結果。這是因為當枚舉到1返回了false,TakeWhile停止了對集合的枚舉。

同樣,通過Take操作,可以查詢出類似SQL數據庫中Top關鍵字的結果。如果想每次取出集合中的N個元素,我們可以arr1.Take(i*N).Except(arr1.Take((i-1)*N)。

4、Skip、SkipWhile :Skip返回從數據源中跳過某元素后的集合。

    SkipWhile需要通過委托來用于測試每個元素是否滿足條件的函數。MSDN給出的解釋如下:

【只要滿足指定的條件,就跳過序列中的元素,然后返回剩余元素。

通過使用延遲執行實現 SkipWhile<(Of <(TSource>)>)(IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Boolean>)>)) 方法。即時返回值為一個對象,該對象存儲執行操作所需的所有信息。只有通過直接調用對象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)來枚舉該對象時,才執行此方法表示的查詢。

此方法使用 predicate 測試 source 的每個元素,如果結果為 true,則跳過該元素。謂詞函數針對一個元素返回 false 后,則生成該元素及 source 中的剩余元素,并且不再調用 predicate。

如果 predicate 為序列中的所有元素返回 true,則返回一個空 IEnumerable<(Of <(T>)>)。】

注意:同TakeWhile一樣,對集合中的元素進行枚舉時,如果返回True則跳過此元素。如果返回False,則返回從返回False的元素開始到集合的剩余元素。即返回False時停止了對集合的枚舉。如果集合中的每個元素都返回True則返回一個空的集合

如: int[] arr1 = {10, 1, 2, 3, 4, 5};var query1 = arr1.SkipWhile(n => n > 9);
            foreach ( var item in query1)
            {
                Console.WriteLine(item);
            }

輸出為:1, 2, 3, 4, 5。

5、Lambda表達式

    Lambda是一個匿名函數,可以包含表達式或者語句塊。它都是用Lambda運算符“=>”。念做“goes to”。如上述TakeWhile、SkipWhile都是用了  n => n > 9 Lambda表達式。在arr1.SkipWhile(n => n > 9)中,體會是n就是arr1中某一個元素,只是編譯器會根據arr1定義的類型識別匿名參數n的類型。

 

聰明的人們


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
正在播放欧美一区| 国产一区二区视频在线观看| 久久69精品久久久久久国产越南| 久久久久久久一区二区| 精品少妇一区二区30p| 亚洲国产精品yw在线观看| 亚洲精品wwww| 久久久免费电影| 青青在线视频一区二区三区| 欧美尺度大的性做爰视频| 亚洲欧美综合v| 亚洲天堂色网站| 尤物yw午夜国产精品视频明星| 欧美激情中文网| 九九视频这里只有精品| 久久久精品在线观看| 亚洲欧洲日产国码av系列天堂| 91中文精品字幕在线视频| 欧美剧在线观看| 亚洲男人的天堂在线| 人人爽久久涩噜噜噜网站| 6080yy精品一区二区三区| 久久久久这里只有精品| 亚洲人成在线电影| 亚洲国产精品成人精品| 日韩精品中文字幕久久臀| 欧美精品videofree1080p| 亚洲日韩中文字幕在线播放| 成人黄色av免费在线观看| 91精品久久久久久综合乱菊| 日韩三级成人av网| 国产精品户外野外| 中文字幕日韩精品有码视频| 久久亚洲精品国产亚洲老地址| 这里只有精品在线播放| 欧美一区二区色| 国产精品久久久久久久久| 尤物99国产成人精品视频| 亚洲精品视频中文字幕| 欧美激情18p| 黄色成人av在线| 欧美夫妻性生活视频| 粉嫩av一区二区三区免费野| 久久亚洲精品小早川怜子66| 国产精品高潮呻吟久久av黑人| 日本精品中文字幕| 日韩av免费看网站| 亚洲精品久久久久久久久久久| 欧美日韩国产成人在线| 亚洲精品影视在线观看| 国产精品久久久久久久久影视| 欧美在线视频免费播放| 福利微拍一区二区| 奇米成人av国产一区二区三区| 欧美成人剧情片在线观看| 91av成人在线| 国产精品色午夜在线观看| 久久久久国产精品免费| 一区二区欧美亚洲| 国产成人高潮免费观看精品| 高清欧美性猛交xxxx| 国产成人在线一区二区| 欧美老妇交乱视频| 国产精品黄色av| 黄色精品在线看| 69久久夜色精品国产7777| 欧美性理论片在线观看片免费| 亚洲精品综合久久中文字幕| 中文字幕亚洲无线码a| 久久精品久久精品亚洲人| 性欧美激情精品| 亚洲天堂成人在线视频| 日韩大陆毛片av| 国产精品高潮呻吟久久av黑人| 韩国精品久久久999| 欧美一区二区三区……| 国产综合香蕉五月婷在线| 深夜福利一区二区| 国产欧美亚洲精品| 欧美激情久久久久久| 亚洲国内高清视频| 精品久久久久久久久久国产| 国产福利视频一区| 中文字幕一区二区三区电影| 亚洲精品av在线| 欧美特黄级在线| 亚洲成成品网站| 日韩电影免费在线观看| 精品在线观看国产| 久99久在线视频| 久热精品在线视频| 欧美成人午夜免费视在线看片| 狠狠躁18三区二区一区| 欧美在线性爱视频| 国产在线观看精品一区二区三区| 欧美色欧美亚洲高清在线视频| 国产aⅴ夜夜欢一区二区三区| 久久久精品国产亚洲| 日韩精品极品在线观看播放免费视频| 国产主播欧美精品| 国产精品三级美女白浆呻吟| 欧美日韩国产区| 国产精品观看在线亚洲人成网| 欧美日韩一区二区三区在线免费观看| 欧美午夜精品久久久久久久| 精品福利樱桃av导航| 亚洲欧洲av一区二区| 国产一区二中文字幕在线看| 久久精品久久精品亚洲人| 97超级碰碰人国产在线观看| 欧美在线视频免费播放| 日韩av在线导航| 欧美区在线播放| 中文字幕一区电影| 精品偷拍一区二区三区在线看| 色悠悠久久88| 最近2019中文字幕在线高清| 久久久国产精品一区| 在线播放国产一区二区三区| 91久久久久久久| 日韩av电影中文字幕| 国产精品国产自产拍高清av水多| 精品中文字幕乱| 国产亚洲欧美另类中文| 一区二区三区日韩在线| 久久人人爽人人爽爽久久| 久久久久久亚洲精品| 欧美日在线观看| 国产日韩欧美视频在线| 日韩有码视频在线| 欧美裸体男粗大视频在线观看| 国产免费一区二区三区在线能观看| 精品国产乱码久久久久酒店| 国产精品国产三级国产aⅴ浪潮| 色狠狠久久aa北条麻妃| 欧美日韩综合视频| 成人黄色激情网| 91高潮在线观看| 97精品伊人久久久大香线蕉| 欧美激情一区二区三区成人| 日韩国产一区三区| 国产欧美中文字幕| 中文字幕亚洲精品| 国产成人综合av| 欧美日韩成人网| 久久免费在线观看| 欧美精品videosex性欧美| 国产精品久久久久久婷婷天堂| 日本伊人精品一区二区三区介绍| 精品视频久久久久久| 欧美在线视频免费观看| 色偷偷9999www| 欧美激情欧美激情| 亚洲国产成人一区| 国产精品亚洲网站| 中文字幕精品久久| 亚洲欧美综合区自拍另类| 亚洲精品美女免费| 91精品视频专区| 国产精品ⅴa在线观看h| 久久久精品亚洲| 精品久久久久久久久久久久久久| 在线观看欧美日韩| 久久久精品欧美|