罗万波
(福建省测绘院,福建福州 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)。
罗万波,工程师,主要从事地理信息系统应用开发及航测、遥感数据处理等工作。