LINQ其實很簡單

2021-04-19 01:09:57 字數 4170 閱讀 9365

會寫這一篇是有原因的,不只一次有人問我,要不要學

linq呢?

linq

看起來很難耶……為何要放棄以前的

sql來學

linq呢?

到底linq

的意義是什麼

?反正就是有很多的問題,說真的,由於最近也沒時間寫本

linq

的書,但是工作累了順手寫寫

blog

還可以,所已針對

linq

這個主題,和大家有一些分享。

其實對於

vb開發人員來說,掌握

linq

說真的比

c#來的簡單很多,主要的原因就是

vb當中有非常多"自動

"的隱含型別轉換,是不需要寫程式**的,也因此操作起來比起

c#真的容易不少。

要掌握linq

的精神,得要知道

linq

出現的目的,其實很簡單,只有一句話,就是希望

"能夠達成以單一的一種語法來查詢多種不同的物件

" 的目的。過去我們要查詢資料庫要用

sql、要查詢

xml要用

xmldom

物件、要查詢

ad又要用另一種不同的查詢方式,總之,查詢這個動作一天到晚出現在電腦程式**當中,但是開發人員卻要學習多種不同的方式,很困擾,所以

linq

就出現了。

所謂的linq

,是.net language integrated query

,也就是在

.net

的開發語言當中,直接把查詢的技術給"整

" 進去,目的就是要加快搜尋(速度

)與降低開發成本。

所以從.net 3.5

開始,linq

變成.net

標準語法的一部分,

ok,就是這樣,所以我們來看看

linq

怎麼查詢,首先,為了展示

linq

,我定義了底下這樣的結構:

structure bmi

dim name as string

dim height as integer

dim weight as integer

dim bmivalue as single

end structure

你用型別也可以,總之上面的結構用來表達乙個人的身高,體重

,名稱和

bmi值。

接著,我編寫底下程式**: '

定義陣列

dim matrix(5) as bmi

'填入測試資料

matrix(0).name = "

王小寶"

matrix(0).height = 170

matrix(0).weight = 65

matrix(1).name = "

韋大寶"

matrix(1).height = 176

matrix(1).weight = 95

matrix(2).name = "

章新寶"

matrix(2).height = 150

matrix(2).weight = 55

matrix(3).name = "

沈中寶"

matrix(3).height = 192

matrix(3).weight = 75

matrix(4).name = "

蕭敦寶"

matrix(4).height = 150

matrix(4).weight = 65

matrix(5).name = "

林寶寶"

matrix(5).height = 177

matrix(5).weight = 75

上面這段程式**就只是很簡單的把資料填入,請注意我們只填入身高體重和姓名,接著,再利用底下的程式**算出

bmi: '

計算bmi

for i = 0 to 5

matrix(i).bmivalue = matrix(i).weight / (matrix(i).height / 100) ^ 2

next

ok,到這邊先告乙個段落,以上都沒有

linq

出現,動作也很簡單,接下來換

linq

出場,在出場前先問讀者乙個問題,如果要找出

bmi值

>25

的資料,你會怎麼寫程式

?沒錯,用

for each

指令,在沒有

linq

功能的時代,我們只能用陣列遍歷的方式查詢每乙個元素,找出符合的資料,但是有底下幾個問題: 1.

為了找出特定的資料而跑整個陣列,看起來挺蠢的。

(不過說真的,如果資料沒有排序,也就只能那麼蠢)2.

可能有一些初學的菜鳥程式設計師,寫出效率很差的查詢程式。

(例如不小心在

for each

當中做了一些不必要的動作)ok

,過去我們對於物件

(或是物件陣列

)的操作,也就只能使用迴圈的方式,但是

linq

提出了一種新的可能,就是通過類似

sql的查詢語法,讓開發人員可以用簡單的程式**,就可以針對物件進行複雜的查詢。

(更重要的是,未來這種簡單的查詢語法變成主流之後,可以用以查詢

"各種不同的物件

",而不只有查詢"物件

")言歸正傳,若要查詢出

bmi值

>25

的資料,你可以透過底下的

linq程式:

'查詢bmi值大於

25的人

dim result = from c in matrix where c.bmivalue > 25

結束,就是這樣,而

result

就是找出的結果物件,你可以通過

result

來取得每乙個符合條件的資料。簡單的說,上面這段程式**的意思是,從

matrix

物件集合當中,找出一些資料,這些資料的

bmivalue

屬性大於

25。其中的

c 只是編寫程式**方便,

c代表該物件元素,你也可以用別的字眼

..而找出的資料

result

也是乙個集合,你可以通過底下的程式**來列出每乙個

bmi值符合條件者的名字:'

顯示名稱

for each item in result

msgbox(item.name)

next

很簡單不是嗎

? result

當中的每乙個

item

,其型別就是

bmi,因為

result

物件是linq

語法跑出的結果,所以只有包含符合

bmivalue > 25

這個條件的人……

上面這段程式**,還可以這樣寫…… '

顯示名稱

for each item in (from c in result select c.name)

msgbox(item)

next

效果完全一樣唷,但是,

(from c in result select c.name)

會產生乙個物件,該物件只有符合條件者的名稱

(相當於一維陣列),而

item

的型別當然就是

string。

通過上面這樣的指令,查詢動作變得相當簡單,還不僅如此,關鍵在於底下這樣的語法:'

查詢bmi

值大於25的人

dim result = from c in matrix where c.bmivalue > 25

具有相當多不同的變化方式,可以組合出各種不同的形式,發揮出強大的查詢力量,再加上學一次,就可以用在各種不同的地方

(這邊我們只用來查詢物件,其實也可以查詢

xml和

database)

,使得linq

的用途更加的廣泛,這就是

linq

的價值與意義。

以後,再跟大家分享一些關於

linq

的其他部分,希望對大家有幫助,

vb developer

其實是幸福的,

linq

其實是很簡單的……

LINQ其實很簡單

會寫這一篇是有原因的,不只一次有人問我,要不要學linq呢?linq看起來很難耶 為何要放棄以前的sql來學linq呢?到底linq的意義是什麼?反正就是有很多的問題,說真的,由於最近也沒時間寫本linq的書,但是工作累了順手寫寫blog還可以,所已針對linq這個主題,和大家有一些分享。其實對於v...

快樂其實很簡單

快樂,乙個簡單而不失文雅的詞語,可真正能體會到其中真諦的又有多少呢?我們來一起 下快樂的真諦吧!快樂,其實每個人對快樂的理解都不一樣,每個人能體會到的快樂程度也不一樣。比如 放假就會讓學生覺得很快樂,週末休息會讓忙碌了一周的上班族快樂,喜歡追星的人見到偶像很快樂等等,你會發現快樂就在我們身邊,快樂並...

快樂其實很簡單

我外甥女年方17個月,在處在呀呀學語的階段,她是個懂禮貌的小女生,爸爸媽媽阿婆舅舅阿姨什麼的都已經叫得很有感覺了,唯獨 阿公 外公 始終叫不出口,可能是 公 這個字對女孩太難了 可能因此女孩長大了要叫別人 老公 來反覆練習這個字,彌補一些童年缺憾 今晨母親喚父親名字,叫他起床,外甥女突然跟隨我母親也...