羅萬波
(福建省測繪院,福建福州 350003)
LINQ在水土保持管理系統開發中的應用
羅萬波
(福建省測繪院,福建福州 350003)

介紹了.NET語言集成查詢LINQ(Language Integrated Query)的結構和原理,并利用它實現了水土保持管理系統的多種類型的數據查詢統計,通過實例的應用和分析表明LINQ技術為開發者提供了一種簡單高效的數據訪問方法。
GIS;LINQ;水土保持管理系統;.NET3.5
水土保持管理系統主要圍繞水土流失監測、治理、預防、開發建設等功能進行設計和開發,在系統中包含多種不同類型的數據源。過去對多種類型的數據源查詢需要不同的查詢語言,例如對關系數據庫我們使用SQL語言,對XML則使用XQuery語言,而LINQ大大簡化了這種情形,它提供一個固定的編程模型,能夠兼容各種數據源和數據格式,即對LINQ兼容的數據格式如XML文檔、SQL數據、ADO.NET數據集、NET集合等都能使用相同的代碼模式進行查詢。不僅如此,它還彌補了數據和對象之間的鴻溝,提高我們的開發效率,傳統的數據查詢一般是簡單的字符串,缺少編譯時類型檢查和智能感應支持,而LINQ在C#和VB里面定義了以查詢為第一位的語言,對于強類型的對象集合就可以使用熟悉的語言和操作寫出查詢,并有便捷的VS內置幫助,因此可以充分利用強類型檢查和智能感知來大幅提高編寫代碼的效率。
LINQ即Language Integrated Query,它是集成在.NET編程語言中的一種特性,已成為編程語言的一個組成部分。在編寫程序時,有編譯時語法檢查、豐富的元數據、智能感知、靜態類型等強類型語言的優點,并且它還可以方便地對內存中的信息進行查詢而不僅僅只是外部數據源。它是 Visual Studio 2008和.NET Framework 3.5版中一項突破性的創新,它在對象領域和數據領域之間架起了一座橋梁,它為 C#和 Visual Basic語言語法提供強大的查詢功能。LINQ引入了標準的、易于學習的查詢和更新數據模式,可以對其技術進行擴展,可支持幾乎任何類型的數據存儲。LINQ體系結構見圖1,它分為三大類型的數據:①Linq To Objects,其主要是針對CLR-Based Objects的查詢,即內存操作;②Linq Enabled ADO.NET是針對關系型數據的,它又包含三種:Linq To Datasets,Linq To Sql, Linq To Entities;③Linq To XML,針對xm l格式數據的操作。LINQ的查詢機制見圖2,所有LINQ查詢操作都由獲取數據源、創建查詢和執行查詢的三個部分組成,在LINQ中,查詢的執行與查詢本身截然不同,如果只是創建查詢變量,則不會檢索任何數據。

圖1 LINQ體系結構圖 [1]

圖2 LINQ查詢機制 [2]
在水土保持管理系統中的水土流失動態監測模塊,需要對水土流失、工程侵蝕和崩崗的表數據進行分類查詢統計,雖然ArcEngine也提供這些功能,但是查詢語言都是以字符串形式,在VS中在對字符串的編譯過程中的錯誤檢查就大大減弱,因此采用LINQ更為簡單和高效。以下通過具體的實例對LINQ的應用進行說明。
2.1 Summarize功能實現
Summarize功能核心是對數據分類查詢統計如圖3所示,在崩崗圖層中可以根據不同的字段,對字段里的內容進行分組,在圖3里是對崩崗的形態進行分組,崩崗在當前shp文件中有瓢形、混合型、弧形、條形、爪形、茞形和陶形七種形態,然后根據所選的字段,自動判斷其類型,如數值型的就統計其總和和平均值,若是字符串型就按當前字段排序獲取最先最后獲取的字段值。如圖中的溝口寬度和防治面積,根據形態分組計算圖斑的數值總和和平均值,土壤類型則是字符型字段,它是根據分組獲取排序后最先的這個字段值。其功能完全類似ArcMap的Summarize功能[4]。

圖3 崩崗Summarize功能
在LINQ里用groupby對查詢的結果進行分組,實現的代碼極其簡單,以總和計算為例,


以上是獲取數據源、創建查詢的操作,程序運行時候,并不執行以上代碼,實現執行查詢操作代碼如下;

2.2 不同年度面積變化功能實現
根據不同年度水土流失的流失強度統計面積的變化,流失強度可分為極強烈流失、劇烈流失、強烈流失、中度流失、輕度流失和微度流失。一種流失強度就有多個圖斑或者是零個圖斑,這就涉及到表關系中的一對多的關系,由于是不同年度的數據,這就要實現多個數據表的操作。首先獲取不同流失強度的面積,代碼如下:

然后就是不同年度的各個流失強度的面積進行多個表聯合查詢,代碼如下:

運行的結果界面如圖4所示。

圖4 不同年度流失強度變化
2.2 調查報告文檔管理
微軟推出LINQ to XML,使得操作XML更簡單.更方便.更智能的XMLAPI[3]。以前的.NETXML編程模型需要使用很多冗長的DOM API,而LINQ to XML則完全可以用與DOM無關的方式與XML文檔交互,這樣不但大大減少了代碼行,而且這種編程模型可以直接映射到格式良好的 XML文檔結構。由此,采用XML作為數據載體,通過LINQ to XML提供的類實現調查報告文檔管理模塊添加、查詢、更新和刪除等操作,其實現的功能界面如圖5所示。

圖5 讀取XML的調查報告文檔功能界面
在這模塊里主要實現以下內容[5]:① 在內存中創建LINQ to XML文檔;②使用LINQ查詢創建XML文檔;③加載和解析LINQ to XML內容;④遍歷內存中的LINQ to XML文檔;⑤LINQ to XML加載;⑥LINQ to XML遍歷;⑦LINQ to XML查詢;⑧修改LINQ to XML文檔。XML操作主要通過XDocument、Xelement、Xdeclaration和Xattribute來實現的。
LINQ是VisualStudio2008和.NETFramework3.5版本中一項突破性的創新,在水土保持管理系統開發中利用它實現多種數據源的查詢統計。開發實踐表明其簡單易學、代碼少,效率高、大大縮短開發周期。它通過面向對象編程的準則應用于關系數據,簡化了面向對象編程與關系數據之間的交互,使用單一的一種語法來實現多種不同對象的查詢,為開發者提供了一種簡單高效的數據訪問方法。
[1] Am ro Khasawneh.Understanding LNQ(C#)[EB/OL].http:// www.codeproject.com/KB/linq/UnderstandingLINQ.aspx? msg=2668049,2007-06-12
[2] M icrosoft MSDN.LINQ介紹[EB/OL].Http://msdn.microsoft. com/zh-cn/library/bb397897.aspx,2007-11-01
[3] 姜玉振,李月鳳.運用LINQ to XML開發用戶登陸授權的動態菜單系統[J].電腦編程技巧與維護,2009(21):26-40
[4] 黨安榮,賈海峰,易善楨,等.ArcGIS 8Desktop地理信息系統應用指南[M].北京:清華大學出版社,2003
[5](美)克萊因.LINQ高級編程[M].北京:清華大學出版社,2009
Application of LINQ to Soil and Water Conservation Management System
by LuoWanbo
The paper introduced framework and principles o f.NET Language Integrated Query,and used it to achieve multiple types of data query statistics of the Soil and water conservation management system.It showed that LINQ technology provides simple and effective data access methods for developers by analysis of and using of the exam p les.
GIS,LINQ,soil conservation management system,.NET3.5(Page:106)
P208
B
1672-4623(2010)06-0106-03
2010-05-10
項目來源:福建省科技計劃資助項目(2008N0117)。
羅萬波,工程師,主要從事地理信息系統應用開發及航測、遙感數據處理等工作。