程序集: SuperMap.Data (in SuperMap.Data)
版本: dll
语法
C# |
---|
public class LinkItem : IDisposable |
备注
数据集表之间的联系的建立有两种方式,一种是连接(join),一种是关联(link)。连接的相关设置是通过 JoinItem 类实现的,关联的相关设置是通过 LinkItem 类实现的,另外,用于建立连接的两个表必须在同一个数据源下,而用于建立关联关系的两个数据集表可以不在同一个数据源下。
下面通过查询的例子来说明连接和关联的区别,假设用来进行查询的数据集表为 DatasetTableA,被关联或者连接的表为 DatasetTableB,现通过建立 DatasetTableA 与 DatasetTableB 的连接或关联关系来查询 DatasetTableA中满足查询条件的记录:
1.连接(join)
设置将 DatasetTableB 连接 DatasetTableA 的连接信息,即建立 JoinItem 类并设置其属性,当执行 DatasetTableA 的查询操作时,系统将根据连接条件及查询条件,将满足条件的 DatasetTableA 中的内容与满足条件的 DatasetTableB 中的内容构成一个查询结果表,并这个查询表保存在内存中,需要获取结果时,再从内存中取出相应的内容。
2.关联(link)
设置将 DatasetTableB(副表)关联到 DatasetTableA(主表)的关联信息,即建立 LinkItem 类并设置其属性,DatasetTableA 与 DatasetTableB 是通过主表 DatasetTableA 的外键( LinkItem.ForeignKeys 属性)和副表 DatasetTableB 的主键( LinkItem.PrimaryKeys 属性)实现关联的,当执行 DatasetTableA 的查询操作时,系统将根据关联信息中的过滤条件及查询条件,分别查询 DatasetTableA 与 DatasetTableB 中满足条件的内容,DatasetTableA 的查询结果与 DatasetTableB 的查询结果分别作为独立的两个结果表保存在内存中,当需要获取结果时,SuperMap 将对两个结果进行拼接并返回,因此,在应用层看来,连接和关联操作很相似。
3.LinkItem 只支持左连接,UDB、PostgreSQL 和 DB2 数据源不支持 LinkItem,即对 UDB、PostgreSQL 和 DB2 类型的数据引擎设置 LinkItem 不起作用;
4.JoinItem 目前支持左连接和内连接,不支持全连接和右连接,UDB 引擎不支持内连接;
5.使用 LinkItem 的约束条件:空间数据和属性数据必须有关联条件,即主空间数据集与外部属性表之间存在关联字段。主空间数据集:用来与外部表进行关联的数据集。外部属性表:用户通过 Oracle 或者 SQL Server 创建的数据表,或者是另一个矢量数据集所对应的 DBMS 表。
注意:使用外关联表制作专题图时,所关联的字段必须设置表名,例如,如果所关联的字段为BaseMap_R数据集的SmID,就要写成BaseMap_R.SMID。
示例
以下代码示范如何构造一个关联信息类,并将其添加到关联信息集合中。
假设已经构造了一个数据源连接信息对象 info;主空间数据集中的外键字段为 LinkID;关联数据集名为 LinkDataset,对应的数据库表名为 LinkTable;该表中有字段 population,主键为 ID。
public void LinkItemSample(Workspace workspace, DatasourceConnectionInfo datasourceConnectInfo) { // 构造一个 LinkItem 对象,并对其属性进行设置 LinkItem linkItem = new LinkItem(); linkItem.ConnectionInfo = datasourceConnectInfo; linkItem.ForeignKeys = new String[] { "LinkID" };//主数据集的外键 linkItem.PrimaryKeys = new String[] { "ID" };//关联数据集的主键 linkItem.ForeignTable = "LinkDataset";//关联数据集 linkItem.LinkFields = new String[] { "LinkTable.population" };//关联数据集的字段 linkItem.LinkFilter = "ID < 100";//关联数据集的过滤条件 linkItem.Name = "关联"; Console.WriteLine("关联信息为:" + linkItem.ToString()); // 构造一个 LinkItems 对象并将 linkItem 添加到其中 LinkItems linkItems = new LinkItems(); linkItems.Add(linkItem); }
继承层次
SuperMap.Data..::.LinkItem