學習 LINQ 的必要性 - Silverlight 2.0 的進化

Silverlight 2.0 在不久之前發表了 Beta1,相較於 Silverlight 1.0 ,進化實在非常大,基本上,可以將其視為強化瀏覽器功能的開發平台,這個主題相當大,工作室未來會以一本書的內容來討論它。

這篇文章先提一下其中一個非常重要的功能,它同時支援了 LINQ ,也就是說,LINQ 已經成為整個.NET平台的資料查詢核心功能了,學了,在未來,你可以比較輕鬆去面對這個領域的工作,不學,早晚還是要面對,況且,它不難,而且功能強大,最重要的,你可以看到VS 2008對LINQ的視覺化支援,可以讓你省去很多資料查詢的腦人問題,例如,欄位的對應。

無論如何,LINQ的未來是璀璨的,XML、SQL 與資料集合物件,將來會有更多不同種類的資料查詢操作,直接透過LINQ來完成。

[ LINQ 最佳實務講座],是我們LINQ學習之路的第一步,觀念很重要,這本書四平八穩,從LINQ的原理,發展的軌跡,到成形的概念,以至於基本的查詢技巧,作了非常完整的闡述,可以讓你避免學習上的錯誤與盲點,從比較正確的方向切入LINQ。

未來,我們會有更進階的作品陸續出來,陪伴大家一起在.NET的學習之路上,大步邁進。:)

8 則留言:

bibby 提到...

呂大..
[ LINQ 最佳實務講座]這本書..我看到第三章了..你說"它不難"..一﹏一||..我怎麼覺得他的觀念蠻不容易的..泛型的觀念跟delgete之前要學低很好..不然讀起來還真得蠻痛苦的..XD..
不過我想是必要的ㄅ..因為那些本該是基本功..哈...
不過好消息的是..至少我讀的都還蠻順的..目前..^^||..之後再跟您報告ㄟ..

康廷數位 提到...

Hi,bibby : 其實我經常強調,針對LINQ來說,這本書算是入門,但是如果是從C#來看,它是進階了,至少你要有委派與集合泛型的基礎,然後物件的觀念也要夠,在這個前提下,LINQ就真的很好學了。XD

我一直建議讀者,C#先從Console下去K,雖然這樣比較無聊,沒有成就感,感覺起步很慢,但是對於後面.NET的學習,幫助很大,這也是我強調入門的讀者,如果讀過我的「Visual C# 2005精要剖析」,再來看這本LINQ,會快很多的道理。

無論如何,前面的路還很長,從這個方向下去,,一開始可能比較辛苦一點,不過應該會漸入佳境的,加油,一起努力吧。:)

P.S. 千萬不要誤會我又要讀者去買書了,基本上是因為「Visual C# 2005精要剖析」與LINQ這兩本,是都是我自已寫的著作,因此風格相同,技術上也是一路延續下來,所以才會這樣建議讀者,不過,重點在於認清C#是獨立於WinFORM與WebFORM的語言,然後去探討它的語法與機制,你才能學好.NET的相關技術,這才是我要強調的。

Good Luck

匿名 提到...

這位大俠, 我也買了你的令Q講座, 你的作者簡介的照片讓我很無言 , 不過確實是一本難得不錯的中文書籍, 本來還打算硬幹原文書(其實主要是台灣出版商都不提供PDF很討厭) .可是很多人都問我, 已經摸熟了ADO了還需要LINQ幹嘛 (公司所有人都在用ADO , 除了我) ,我其實也只是沒摸過ADO直接選令Q , 而且我也碰到XPE的.NET版本問題 , XPE大多公司出機內建都只有.NET 2.0 , 使得這一個月投入大量時間學習的令Q一下子碰壁 ... 實在很傷心 ,哈哈.

康廷數位 提到...

作者簡介的照片讓我很無言 => 我自己也很無言…

對資料庫的支援,其實只是LINQ其中的一塊,如果你本來就用ADO.NET,LINQ可以讓你針對DataSet回傳的資料進行更豐富且細膩的操作。

如果要開發大型系統,ORM是很好的作法。

另外,針對XML的存取,用LINQ來作,同樣的,在操作上可以更彈性,同時可以經易的與DataSet等資料來源交換資料。

當然,LINQ to Objects 這一塊核心,才是關鍵啊。

所以,LINQ基本上也不是用來取代ADO.NET,善用這些技術作最好的整合,才是開發的王道啊。:)

.NET 2.0 是必備的呀,.NET 3.5不過就加上一些東西而已,再額外下載一下就支援了,這部份應該不是問題,呵呵。

Good Luck

匿名 提到...

大俠請教一下令Q P.124頁這邊(我命名沒全部照書上) ...
我的疑問是 :1. 為什麼選radioButton可以排序 , 2.orderby fd(file)這一行後面看不懂.


if (radioButton1.Checked)
fd = x => x.CreationTime;

if (radioButton2.Checked)
fd = x => x.Name;

if (radioButton3.Checked)
fd = x => x.Name.Length;

IEnumerable@FileInfo@ enumFileinfosearch =
from file in enumFileinfos
orderby fd(file)
where file.Name.Contains(textBox1.Text)
select file;

康廷數位 提到...

這有一點兒迂迴,來看看:

首先請看一下98頁中間,OrderBy方法的定義說明,其中的第二個參數,如下:

Func<TSource,Tkey> keySelector

OrderBy根據這個參數作排序。

因此接下來你可以看到排序方法的引用如下:

IEnumerable<String> enumList=strList.OrderBy(str=>str.Substring(0,3)))


現在回到124頁,由於這個範例的排序條件是動態指定的,因此我不能在LINQ裏啊將排序寫死,所先宣告一個Func,也就是124頁第一行以網底標示的程式碼:

Func<FileInfo,object> fd=null

這個fd接下來根據使用者所指定的排序條件,以=>運算子湊出排序條件,例如:

fd=x=>x.CreateTime ;

而其中的x為上述Func的FileInfo物件參數,只要在這個fd正式指定給LINQ裏面的OrderBy的時候,透過小括弧,將要排序的FileInfo物件,也就是LINQ當中所指定的file這個東西指定給它即可,也是你看到的這一行:

orderby fd(file)

出來的LINQ就會根據file,再根據指定的條件值作排序了。

這整個關鍵在於Func是不是有徹底瞭解,初學LINQ的同學,這個部份是很大的問題,因為它是從泛型、委派衍生出來的擴充語法,這一部份如果不懂,LINQ有一大半就沒辦法玩了。

至於要如何瞭解這個部份,很簡單,我從最基礎的System.Collection到泛型再到委派最後Lambda一路完整作了說明,你只要從第二章的開始一路k到第二章結束,就會完全明白了,當然,你至少要知道非泛型的System.Collection是什麼東西,這是C# 1.0 時代就有的,用來處理集合運算的命名空間,應該是C#開發人員必備的基本知識,這裏就不談囉。:)

GOOD LUCK

匿名 提到...

感謝 , 不好意思再打擾請教一個困擾許久問題 , 中鋼大型電腦用的是ONC RPC/Unix RPC , Net框架沒有提供支援嗎 ? 目前用一個Win95年代的服務搭配來連開發很不方便. 買Distinct的產品又很貴 ......

康廷數位 提到...

呃呃,這超出我的理解範圍之外了,無法給你任何的建議,很抱歉了 ~~~