為什麼需要LINQ?
面向對象的編程語言已經成為企業應用開發的重要工具,ADO.Net對關系數據提供了一種方便的接口,但還不是一種面向對象的方法。例如,下面的偽代碼:
這段偽代碼說明了管理數據的一種面向對象的方法,對開發人員來說,看不到查詢或SQL語句。你只需關心的只是做什麼,而無需關心怎麼做。這種將面向對象和關系數據結合在一起的方法叫做對象關系映射(ORM)模型,這樣的方法簡化了枯燥的數據操作,簡潔明了。
關於ORM,在Java世界裡有很多框架,但在.NET Framework裡還比較少,NHibernate就是Microsoft .NET平台下ORM的實現,它的目的是將開發人員從大量的關系數據持久化相關的編程中解放出來。目前,NHibernate的穩定版本是NHibernate 1.2.1,於2007年11月份發布,加入了Hibernate 3中的更多功能,並且支持 .NET 2.0,存儲過程,泛型和可為空類型。NHibernate 2.0目前正在開發中。畢竟NHibernate屬於開源的代碼,不是微軟自己的東西,而且它處理的數據源也有限。VS 2005中NHibernate的插件下載地址:http://sourceforge.Net/projects/nhibernateaddin。
盡管微軟在Dynamics 3.0應用服務器中嵌入了ORM功能,並且在ADO.NET 3.0中將廣泛支持此功能,但是還仍然沒有將這種編程模型提供給.NET開發人員。ADO.Net中數據的操作采用的是Command或者DataAdapter對象來操作關系數據庫,但需要自己寫的代碼很多,並且需要自己寫SQL語句。
.Net也提供了處理XML和非關系數據源,但是我們必須了解其他的方法來查詢信息,比如XPath或者XQuery。
現在,可以編程管理的數據可能來自不同的數據域,如數組、對象關系圖、XML文檔、數據庫、文本文件、注冊表、電子郵件消息、簡單對象訪問協議(SOAP)信息內容、Microsoft Office Excel文件等等很多。每種數據域都有自己特定的訪問模型,例如,當查詢數據庫時,通常使用SQL,當遍歷XML數據時,使用Document Object Model(DOM)或者XPath、XQuery,當遇到數組是采用遍歷的方法,對於對象關系圖,則需要自己創建算法,對於Excel文件,電子郵件消息或者Microsoft Windows注冊表,要訪問他們,則需要使用特定的應用程序編程接口(API)。到最後,訪問不同的數據源就要使用不同的編程模型。
將多種數據訪問技術統一到一個全面的模型也曾出現過,例如:開放數據庫互聯(ODBC)提供者允許開發人員以一種類似SQL的語言通過關系模型訪問數據。在某些時候,數據以層次或者圖形模型來表示更加符合數據的本質含義。另外,如果數據模型沒有與編程語言結合在一起,就可能需要編程人員自己管理不同的類型體系。所有這些差別在數據和代碼之間產生一種“阻抗失諧”。LINQ就是解決這些問題的技術,它提供統一的訪問和管理數據的方法,並且不是采取“一刀切”的模型來實現。LINQ在這些數據模型之間均衡操作直接的共同特性,而不是在他們之間將不同的結構變成統一。
什麼是LINQ?
LINQ是Language Integrated Query的縮寫,翻譯成漢語就是語言集成查詢。搜索一下網絡,可以發現很多關於LINQ的描述:
1,LINQ是所有類型數據的統一編程模型,它可以讓你使用一致的模型查詢和使用數據,而不用關心數據源是什麼。
2,LINQ是一種將SQL查詢嵌入到代碼中的另一種工具
3,LINQ是另外一種數據抽象層。
以上這些描述在某種程度上都是正確的,但每種描述都僅僅集中在一個方面。LINQ能夠做的事情遠遠比嵌入的SQL查詢要多很多,它也比“統一的編程模型”更容易使用,同時也遠不止是數據模型的另外一套規則。
LINQ是一套簡化和統一數據訪問的實現方法。LINQ並不是要求你使用一種特定的架構,它使一些現有訪問數據架構的實現更加便利。和使用其他工具一樣,LINQ也存在好和壞兩個方面。要從LINQ中得到最好的東西,就需要對它有所精通。
LINQ是一個編程模型,將查詢作為一流的概念引入到Micosoft .NET語言中。當然,這需要編程語言和框架(.Net Framework 3.5)的支持。
下面的代碼將在頁面上的GridVIEw2中顯示Country為USA客戶名稱:
當然,也可以在ASPX頁面裡進行設置:
實現上面數據顯示的過程如下:
1,建立Target Framework 3.5的網站
2,添加新項:LINQ to SQL Class,並命名為NorthWind.dbml
3,提示你是否加入到App_Code文件夾,為安全考慮,點“是”加入
4,打開Server Explorer,將NorthWind數據庫裡面的Customers表拖到對象關系映射設計器
5,從工具箱中將LinqDataSource控件拖到ASPx設計器,並進行配置數據源,選擇NorthWindDataContext
6,選擇表和數據列
7,點擊Where設置查詢條件
8,單擊“Add”,然後單擊“ok”-“ Finish”
9,從工具箱拖進兩個GridView控件,配置GridVIEw1的數據源為LinqDataSource1
10,在代碼設計器裡輸入下面的代碼:
protected void Page_Load(object sender, EventArgs e)
{
NorthWindDataContext NorthWind = new NorthWindDataContext();
var query = from c in NorthWind.Customers where c.Country == "USA" select new { c.Country, c.CompanyName };
GridVIEw2.DataSource = query;
GridVIEw2.DataBind();
}
預覽頁面,結果如下: