Linq項目簡介和開發環境的搭建
9月份,微軟推出了一項名為“Linq項目”的新技術,用於在.NET語言中集成數據查詢的功能。您可以從http://msdn.microsoft.com/netframework/future/得到Linq項目的技術預覽版,其中包括大量的介紹文章(英文)和C# 3.0以及VB 9.0的編譯器。
Linq項目英文全稱為Language Integrated Query,即“語言集成查詢”。Linq基於.NET Framework 2.0,通過對語言的改進,實現在直接在語言中通過類似SQL語句的構造對數據源進行查詢,可查詢的數據源從基本的順序結構(如數組和鏈表)延伸到關系型數據庫(目前是SQL Server,相信將來可以擴展到幾乎所有的關系型數據庫)和XML。
C# 3.0是C#語言再一次升級後的版本,率先實現了Linq的概念;同樣實現了Linq的還有VB 9.0。從上面提到的網址,讀者可以找到兩種語言的編譯器的技術預覽版。在本文中我們將以C# 3.0為中心討論其開發環境的搭建和語言改進。下載得到的是一個名為“linq preview.msi”(也可能不同)的安裝包,雙擊之後可以和其他軟件一樣進行安裝,此處不再贅述。該安裝包為Visual Studio 2005 Beta 2及以後的版本和Visual C# 2005 Beta 2提供了插件(項目模板)和C#編譯器,該編譯器生成的IL代碼可以直接在.NET Framework 2.0上運行。在安裝了該預覽版後,在新建項目對話框中項目類型列表的Visual C#節點下,我們可以看到一個Linq Preview的條目,並可以在右邊的項目模板中選擇一些桌面項目模板(Linq暫時還不支持Web項目),如下圖所示:
圖1 - 安裝完Linq的Visual Studio 2005 新建項目對話框
只要選中了Linq中的項目模板,我們就可以像編寫其他應用程序一樣在Visual Studio 2005中開始編寫C# 3.0應用程序了,在編譯的時候IDE會自動為我們選擇C# 3.0的編譯器。
現在我們已經可以開始編寫C# 3.0應用程序了,後面的章節中我就將為大家講解C# 3.0所帶來的語言增強。值得說明的一點是,本文是一個系列文章中的一篇,這一系列文章共三個部分。本文為第一部分,講述C# 3.0種基本的語言增強,這些語言增強其實是其他兩個部分的基礎;第二部分將講述C# 3.0中的Lambda表達式,這是匿名方法的自然進化形式,它不僅能將表達式體現為可執行的方法(委托),也能將表達式體現為可以在運行時進行操作的數據結構——表達式樹;最後一部分講述的才是Linq項目中最核心的也是最激動人心的內容——查詢表達式,這是Linq在C#中的實現形式。同時,Linq還針對SQL查詢和XML查詢對.NET Framework基礎類庫進行了擴充,分別稱作DLinq和XLinq,這些內容我將在其他系列文章中為大家講述。
在本文的講述過程中,限於篇幅,僅提供了簡短的代碼段而不是完整的代碼。不過這些代碼段是從完整的、可正確編譯和運行的代碼中抽取出來的,這些完整代碼可以從這裡下載,並且在本文的第5部分中有關於完整代碼的介紹。
好了,廢話太多了,讓我們趕快進入C# 3.0的精彩世界。
具有隱式類型的聲明
在一個帶有初始化器的聲明語句中,待聲明的變量的類型是顯而易見的——和初始化表達式的結果類型一致。對於這種情況,在C# 3.0中可以使用新增的關鍵字var來代替聲明中的類型,而由編譯器根據初始化表達式來推斷出變量的類型。
var i = 5; // int var d = 9.0; // double var s = "Hello"; // string var a = new int[] { 1, 2, 3, 4, 5 }; // int[] Console.WriteLine("Type of variable <i>: {0}", i.GetType()); Console.WriteLine("Type of variable <d>: {0}", d.GetType()); Console.WriteLine("Type of variable <s>: {0}", s.GetType()); Console.WriteLine("Type of variable <a>: {0}", a.GetType());
上面的代碼在C# 3.0中是符合語法規則的,前四行代碼就是使用了隱式類型的聲明;而後四行代碼用於在運行時驗證各個變量是否擁有正確的類型。如果在Visual Studio 2005中運行這段代碼(為了能夠看到結果,請使用Ctrl+F5來編譯並啟動程序),會得到下面的結果:
Type of variable <i>: System.Int32 Type of variable <d>: System.Double Type of variable <s>: System.String Type of variable <a>: System.Int32[]
本文示例代碼或素材下載