| 淑芬's profileSophie: KISS.NETPhotosBlogLists | Help |
Sophie: KISS.NETKeep It Simple and Stupid 簡單最好 June 25 為什麼要LINQ? (摘錄自書:ASP.NET 3.5最佳實務講座 )LINQ並沒有讓.NET多了什麼以前做不到的功能,但是它把事情變簡單了。
透過LINQ,微軟把程式語言的觸角直接延伸到資料庫、XML中。
以往在程式裡要存取資料庫,你得先建立相關的資料庫連線物件、命令物件,並在程式中嵌入另外一段資料庫專屬的SQL指令。而處理XML時也是得建立另外的XML相關物件、載入XML文件,若要新增或查詢其中的XML元素或屬性,則要搭配另外一套XPath語法。 正如其名『Language Integrated Query』,它把資料庫、XML及物件的存取整合成一套,並且包裝成程式語言本身的語法,因此寫程式時不用再建立額外的資料庫連線物件、XML物件,也不用學習、嵌入許多不同語法的查詢指令。
透過LINQ各式的Provider,把原本需要程式開發人員撰寫的ADO.NET程式、XML程式…等,轉移到Provider中。.NET存取關聯式資料庫一樣得透過ADO.NET,但是程式開發人員可以不碰ADO.NET、只寫LINQ,等程式執行時Provider再自動產生ADO.NET的程式碼。 另外Provider的架構是開放而且是可擴充的,只要為資料來源撰寫Provider便可納入LINQ的適用範圍,目前已經有軟體廠商為MySQL、Oracle撰寫LINQ Provider:LINQ to MySQL、LINQ to Oracle。藉由各式的Provider,程式設計師只需要一套LINQ語法便可存取各種不同類型的資料。換句話說,LINQ將會是放諸四海皆準的資料存取語法。
而且LINQ語法與程式語法整合在一起,所以在LINQ裡,可以直接援用.NET的資源。開始感覺到LINQ的強處了嗎?比起SQL指令或任何一種特定語法,LINQ有眾多的.NET Framework類別給它做靠山,可以做的事及彈性比起SQL語法多多了!
May 14 Visual Studio 工具箱瘋了,圖示都不見了!!上課時,有些學員遇到Visual Studio工具箱裡的圖示都不見的問題,或是重複出現的情況,[工具箱]好像瘋了。比如說:Button重複出現,或是全不見,只剩下Pointer。怎麼辦?
試著用Tools-->Import and Export Settings...,重新匯入開發環境設定,沒有作用。
若不想出解決方法,真的很不方便。所幸在Google了一番後,終於找到解法:
1.用[檔案總管]瀏覽以下目錄
2.將此目錄下副檔名為.tbd的檔案全刪除 (如果沒看到請檢查[檔案總管]Tools -> Folder Options -> View 下的相關設定以顯示隱藏檔案)
3.重新開啟 Visual Studio後,[工具箱]就會回復正常了!
December 19 Crystal Reports Viewer 2008 免費下載曾經有人問過: 為什麼 PDF 有免費的 Acrobat Reader,Flash也有免費的 Flash Player,Crystal Reports做出來的報表使用者卻沒有Viewer可以看?
現在終於有了答案:Crystal Reports Viewer 2008!
快去下載吧!
雖然它的版本是2008,也就是支援最新版Crystal Reports 2008,但一樣可以向前相容,所以也就可以拿來看之前Crystal Reports XI或9.0製作的報表檔.
對了,有中文版哦!唯一讓我不太滿意的一點是,好像沒辦法讓使用者設定參數值?(希望有人告訴我這是錯的) November 26 LINQ:「查詢運算式」(Query Expression) vs.「方法架構查詢」(Method-Based Query)在 LINQ 簡介文件中,大部分的查詢都是使用 C# 3.0 引進的宣告式查詢語法,以查詢運算式的形式撰寫。不過,.NET Common Language Runtime (CLR) 本身並沒有查詢語法的概念,事實上在編譯期間,查詢運算式會轉譯為 CLR 可以了解的項目:即方法呼叫。這些方法稱為「標準查詢運算子」(Standard Query Operator),例如:Where、Select、GroupBy、Join、Max、Average 等。
標準查詢運算子是以稱為「擴充方法」(Extension Method) 的一種新方法來實作。因為LINQ標準查詢運算子擴充了IEnumerable<(Of <(T>)>),因此可以呼叫 numbers.Where(...) 。擴充方法會「擴充」IEnumerable<(Of <(T>)>),直接以當做型別上的執行個體方法一樣呼叫即可。
若要開始使用 LINQ,在擴充方法方面只要用using 指示詞,將擴充方法帶入應用程式的可視範圍內即可。
一般而言,因為查詢語法通常比較簡單易懂,所以建議使用查詢語法,不過,方法語法與查詢語法之間並沒有語意上的差異。你可以比較以下兩種寫法:
int[] numbers = { 5, 10, 8, 3, 6, 12 };
//Query syntax:
IEnumerable<int> numQuery1 = from num in numbers where num % 2 == 0 orderby num select num; //Method syntax:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n); 不過有些查詢(例如擷取與所指定條件相符的項目數,或擷取來源序列中值最大的項目) 只可以用方法呼叫形式表示。
November 25 何謂擴充方法 (Extension method )?擴充方法能將方法「加入」至現有型別,但不需要建立新的衍生型別 (Derived Type)、重新編譯,或是修改原始型別。
擴充方法的第一個參數指定方法進行作業的型別,而這個參數的前面需加上 this 修飾詞 (Modifier)。
namespace ExtensionMethods
{ public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } }
編譯器遇到方法呼叫時,會先在型別的執行個體方法中尋找相符項目。如果找不到相符項目,則會搜尋任何針對型別定義的擴充方法,並繫結至找到的第一個擴充方法。
擴充方法是一種特殊的靜態方法,但是可以用擴充型別上的執行個體方法 (Instance Method) 來呼叫。編譯器 (Compiler) 產生的中繼語言 (Intermediate Language,IL) 會將擴充方法轉譯為對靜態方法的呼叫。因此,實際上並未違反封裝 (Encapsulation) 的準則。
使用 using 指示詞,將命名空間 (Namespace) 明確匯入至原始程式碼時,擴充方法才會進入此程式的可視範圍。 對於以 C# 和 Visual Basic 撰寫的用戶端程式碼,擴充方法與型別中明確定義的方法,兩者的呼叫方式並沒有明顯的差別。
擴充現有型別時,應該盡可能以建立衍生自現有型別的新型別來達成此目的。
如果擴充方法的簽章與型別中定義的方法相同,則絕不會呼叫擴充方法。
擴充方法是帶入命名空間層級的範圍。例如,如果多個靜態類別在名為 Extensions 的單一命名空間中含有擴充方法,則透過 using Extensions; 指示詞可將這些擴充方法全都帶入範圍。 擴充方法可擴充類別或介面,但無法覆寫原有的方法。也就是說,名稱和簽章 (Signature) 與介面或類別方法相同的擴充方法將無法予以呼叫。在編譯時期,擴充方法的優先順序一律會低於型別本身中定義的執行個體方法。換句話說,如果型別具有名為 Process(int i) 的方法,若擴充方法也有相同函式簽名,則編譯器一律會繫結至執行個體方法。 |
|
||||
|
|