LINQ簡記(3) 子句

2021-08-26 14:07:08 字數 2759 閱讀 4155

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 ...