IQueryFilter基于属性查询过滤数据。需要定义一个where子句。可以指定要返回值的字段列表。如果没有指定列,将返回所有值。当需要根据属性值和属性的关系过滤数据时,使用该接口。
成员
AddField,OutputSpatialReference,SubFields,WhereClause
IQueryFilter.WhereClause属性
public string WhereClause{get;set;}
WhereClause子句用于指定子句限制要素。
字段名称
在file geodatabase,shapefile,dBase table,coverage,INFO table中查询,字段名称用””括住,如“AREA”。
在personal geodatabase中,字段名称用[]括住。
在ArcSDE geodatabase或ArcIMS image service或 feature service中查询时,字段名不用括住。
在工作表如Excel文件(.xls文件)或text文件(.txt文件)中查询时,字段用‘’括住,使用表格窗体的Select By Attributes对话框时,用中括号[]。
字符
字符都用‘’。
Personal geodatabase中不区分大小写,但在ArcSDE,File和shapefiles中区分大小写。可以用SQL函数将值转化成大写或小写。使用基于文件的数据源时,用UPPER或LOWER函数。例如下个表达式将选择名为Jones或JONES的客户:UPPER(“LAST_NAME”)=’JONES’.其他数据源也有相同的函数例如personal geodatabase中的UCASE和LCASE函数。
使用LIKE可以创建一个不完整的搜索字符。
通配符
通配符时表示一个或多个字符的特殊符号。
在基于文件的数据中使用‘%’表示任意个字符,‘_’表示一个字符。在personal geodatabase中‘*’表示任意个字符,‘_’表示一个字符。
注意在表达式中使用‘=’和通配符,通配符将会作为一个字符对待。
在连接表中,使用通配符要适合连接的数据源,如果查询涉及连接的两个部分,使用‘%’和‘_’通配符。例如,将一个dbf文件(join table)连接到个人数据库的要素类中(target table)。
使用‘*’查询个人数据库的字段,使用‘%’查询dbf的字段,使用‘%’查询两个数据源的字段。
与QueryDef对象不同,QueryFilter对象支持所有的workspace,包括shapefiles和coverages。要使用ORDER BY和GROUP BY子句查询属性,查看IQueryFielterDefinition::PostfixClause。
public void IQueryFilter_(IFeatureClass featureClass) { IQueryFilter queryFilter=new QueryFilterClass(); queryFilter.SubFields="STATE_NAME,POPULATION"; queryFilter.WhereClause="STATE_NAME=‘CaliFornia‘"; IFeatureCursor featureCursor=featureClass.Search(queryFilter,false); }