LINQ簡記(3) 子句

2022-08-15 21:57:08 字數 2654 閱讀 9808

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的。

string source2 = new string;  

var res2 =  

from s in source2  

where s.startswith("t") && s.length >= 3  

select s;  

debug.write("\n\n以「t」開頭並且長度在3以上的字串有:\n");  

foreach (string str in res2)  

輸出結果如下:

以「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開頭的物件的集合。

在實現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 ...