arcengine属性查询 一些记录

遇到的问题、值得记录的东西,杂乱的记一下。

一、奇怪的数据类型支持

环境:arcengine 10.0,oracle10g+sde10.0

ORACLE+sde库中有个string类型的字段,一般设置里面值为1,其他时候设置值为0或为空NULL。

在查询时发现wherecause语句写法都可以:即使是string也可以像int那样查询,不知道这是什么莫名其妙的问题。

//类似int数值的写法
string isCause1 = "( WASTEDEVICE = 1 )";
//这才是string类型的写法
string isCause2 = "( WASTEDEVICE = '1' )";

同理,以下也是一样的

string isCause = "(WASTEDEVICE <> 1)";
string isCause = "(WASTEDEVICE <> '1')";

二、ArcGIS Engine空间高效查询(IIdentify方法)

利用ArcEngine空间查询,大多数人会马上想到利用IQueryFilter接口,的确,IQueryFilter接口是我们经常使用的查询接口而且使用比较简单,但是在大数据量查询数据,尤其是空间查询时效率会很低,导致速度会很慢。

给大家推荐一个接口,给刚刚入门或者还不知道该接口的朋友提供一点参考。

IIdentify

IIdentify继承了FeatureLayer、RasterLayerCadFeatureLayer等N种图层种类,而且查询效率比IQueryFilter要高

缺点:只有与查询图形相交一种查询方式没有IQueryfilter的查询方式多样

详细方法查看hl3292博友的 ArcGIS Engine空间高效查询(IIdentify方法)-已解决

三、查询结果排序

据一些文档说,IQueryFilter 里的类SQL语句不支持排序,这时使用ITableSort接口。

IQueryFilter、ISpatialFilter接口可以转IQueryFilterDefinition接口设置Order By和Group By语句。虽然有些帮助文档说不能使用Order By和Group By语句,但是其实是可以的,只可以用在GeoDatabase,不能用于ShapeFile和Coverage数据。例子如下

queryDef.Tables = “tableA Group by Field01”;
queryDef.SubFields = “Field01”;
或者
queryDef.Tables = “tableA”;
queryDef.SubFields = “Field01, COUNT(Field01)”;
queryDef.WhereClause = “Field01 is not null GROUP BY Field01 HAVING COUNT(Field01) > 1”;

原文 关于ArcEngine查询统计

待续………………

原文地址:https://www.cnblogs.com/GISRSMAN/p/4961422.html