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