最近需要对IFeatureClass的选择结果进行再次选择,并对再次选择的结果按照两个属性进行排序操作。于是先用IFeatureClass.Select方法进行第一次选择,将选择的结果用ISelectionSet类型变量SelectionSet1存放。然后需要对SelectionSet1中的要素进行再次选择,并且对选择结果进行排序,这时候问题就来了:用ISelectionSet.Search方法进行查询选择并排序时,如果在IQueryFilter.WhereClause选择语句后面加上排序词(order by xxx)就会报错:SQL命令未正确结束。
问题:ISelectionSet.Search方法进行选择不支持按属性排序
原因:未搞清,疑为AE不支持或者自己方法不正确
解决方法:将第二次查询结果SelectionSet1.Select通过ISelectionSet变量SelectionSet2进行存储,然后使用ITableSort接口对SelectionSet2中的数据进行按属性值排序。代码如下:
ISelectionSet SelectionSet2= emptySelSet.Select(queryFilter,esriSelectionType.esriSelectionTypeHybrid,esriSelectionOption.esriSelectionOptionNormal,null);//存储第二次查询结果 string strSortField = "CARID,TIME";//排序所需属性 ITableSort pTableSort = new TableSort(); pTableSort.SelectionSet = SelectionSet2;//排序数据源输入 pTableSort.Fields = strSortField; pTableSort.set_Ascending(strSortField,true);//选择升序排列 pTableSort.Sort(null); IFeatureCursor emptyLineFeaCursor = pTableSort.Rows as IFeatureCursor;//排序结果输出