淑芬's profileSophie: KISS.NETPhotosBlogLists Tools Help

Sophie: KISS.NET

Keep 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.用[檔案總管]瀏覽以下目錄
  • Vista- C:\Users\<你的Windows帳戶名稱>\AppData\Local\Microsoft\VisualStudio\9.0
  • Windows- C:\Documents and Settings\<你的Windows帳戶名稱>\Local Settings\Application Data\Microsoft\VisualStudio\9.0
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) 明確匯入至原始程式碼時,擴充方法才會進入此程式的可視範圍。
using ExtensionMethods;

對於以 C# 和 Visual Basic 撰寫的用戶端程式碼,擴充方法與型別中明確定義的方法,兩者的呼叫方式並沒有明顯的差別。
string s = "Hello Extension Methods";
int i = s.WordCount();

  • 何時該定義擴充方法?

擴充現有型別時,應該盡可能以建立衍生自現有型別的新型別來達成此目的。
使用擴充方法來擴充其原始程式碼無法變更的型別時,會有型別實作 (Implementation) 的變更導致擴充方法中斷的風險。

  • 實作型別的擴充方法,注意事項:
如果擴充方法的簽章與型別中定義的方法相同,則絕不會呼叫擴充方法。
擴充方法是帶入命名空間層級的範圍。例如,如果多個靜態類別在名為 Extensions 的單一命名空間中含有擴充方法,則透過 using Extensions; 指示詞可將這些擴充方法全都帶入範圍。
 
擴充方法可擴充類別或介面,但無法覆寫原有的方法。也就是說,名稱和簽章 (Signature) 與介面或類別方法相同的擴充方法將無法予以呼叫。在編譯時期,擴充方法的優先順序一律會低於型別本身中定義的執行個體方法。換句話說,如果型別具有名為 Process(int i) 的方法,若擴充方法也有相同函式簽名,則編譯器一律會繫結至執行個體方法。

 

淑芬 鄭

Occupation
Location
熟悉.NET及報表相關技術:ASP.NET、Microsoft Reporting Service、Crystal Reports等,MVP微軟最有價值專家、MCTS、MCT。

為Crystal Reports 2008報表設計與開發、ASP.NET 3.5 最佳實務講座 Using Visual C#...等8本電腦書籍作/譯者。

歡迎洽談教學:SueFengCheng@hotmail.com。
Photo 1 of 6
More albums (1)