LINQ簡記(3) 子句

2021-09-06 04:50:14 字數 2105 閱讀 4391

linq查詢表示式的子句如select,where,from等都是比較簡單的子句,相信各位多練習練習,再結合msdn的例子,基本上是可以理解的,因此,本文只挑幾個有代表性的,以及有些難理解的子句來簡述一下。

一、where子句。

在sql中,篩選語句常用的表示方式如「select * from users where uname = 'dmin'」,這個sql語句就帶有where子句,其實,在linq中也類似,只不過放的位置不一樣。請看下面的例子。

int source1 = new int ; // 篩選出大於20的數字 var res = from n in source1 where n > 20 select n; debug.write("\n\n大於20的整數有:\n"); foreach (int x in res)

輸出的結果為:

大於20的整數有: 50 22 38 91

復合條件的寫法與if等判斷語句一致,linq遵循c#語法,再看看下面乙個例子,從字串陣列中選出以t開頭並且長度大於等於3的。

輸出結果如下:

以「t」開頭並且長度在3以上的字串有: time tikkyode

二、group子句。

這是乙個有點兒難度的子句,很多朋友可能搞不清楚它查詢後返回的是什麼。這樣,我們還是用乙個例子來說明吧。

首先,宣告乙個類,包含兩個字段:學生姓名和成績。

public class student public int score }

接著,我們把學生的名字以首字母進行分組。

student source3 = new student, new student, new student, new student, new student, new student, new student }; var res3 = from st in source3 group st by st.name[0]; debug.write("\n\n查詢結果變數的型別:" + res3.gettype().name + "\n"); debug.write("\n分別輸出各分組的資訊:\n"); foreach (var g in res3)

除錯執行,然後注意檢視「輸出視窗」中的內容。

查詢結果變數的型別:groupedenumerable`3 分別輸出各分組的資訊: 資料型別:grouping 資料型別:grouping 資料型別:grouping

因此,我們可以得到這樣的結果:

1、分組查詢返回乙個groupedenumerable;

2、每個groupedenumerable中包含n個grouping。

我們發現這些類在物件瀏覽器中找不到,groupedenumerable是內部類,但grouping通過反射也沒找著,那它們的結構到底如何?

現在,我們通過斷點除錯,進一步了解它們。

從截圖中我們看到,igrouping有乙個key屬性,其實它就是儲存我們用來進行分組的鍵,怎麼理解呢?

回到上面的例子,我們以什麼作為分組的依據?對,姓名欄位的第乙個個字母,其實是char型別,因此,比如上面的,「z」就是乙個組的鍵,在這個組裡面,都是以z開頭的物件的集合。

我們可以下乙個不成文的結論:分組結果中的所謂key就是我們用於分組所依據的字段或具體的值。

在實現igrouping的類中,顯然會實現getenumerator方法,也就是說我們可以把它foreach出來,上圖中看到,每個元素(telement)說白了就是已經被分組的物件,上例中即為student物件。

而每個組中其實包含lookup類。

呵呵,有些混亂了,我們可以這樣總結:

執行了linq分組查詢後,得到的所有分組的集合a,而a中的每個成員就是乙個組g1、g2……而g1中就是被分到該組的物件o1、o2……可能用乙個圖來表示會直觀一點。

現在,我們把上面的**改一下。

foreach (var g in res3) }

輸出結果如下:

z 姓名:zhangfeng 成績:60 姓名:zhongning 成績:65 l 姓名:liuxiaoshan 成績:75 姓名:liangwutai 成績:80 姓名:lanao 成績:79 f 姓名:funan 成績:71 姓名:fangtianhao 成績:88

LINQ簡記(3) 子句

linq查詢表示式的子句如select,where,from等都是比較簡單的子句,相信各位多練習練習,再結合msdn的例子,基本上是可以理解的,因此,本文只挑幾個有代表性的,以及有些難理解的子句來簡述一下。一 where子句。在sql中,篩選語句常用的表示方式如 select from users ...

LINQ簡記(3) 子句

linq查詢表示式的子句如select,where,from等都是比較簡單的子句,相信各位多練習練習,再結合msdn的例子,基本上是可以理解的,因此,本文只挑幾個有代表性的,以及有些難理解的子句來簡述一下。一 where子句。在sql中,篩選語句常用的表示方式如 select from users ...

LINQ簡記(3) 子句

linq查詢表示式的子句如select,where,from等都是比較簡單的子句,相信各位多練習練習,再結合msdn的例子,基本上是可以理解的,因此,本文只挑幾個有代表性的,以及有些難理解的子句來簡述一下。一 where子句。在sql中,篩選語句常用的表示方式如 select from users ...