LINQ其實很簡單

2021-08-22 17:35:19 字數 3240 閱讀 4924

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

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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 這個主題,和大家...

快樂其實很簡單

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

快樂其實很簡單

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