ThinkGeo.com    |     Documentation    |     Premium Support

Ignoring case while using "GetFeaturesByColumnValue"

Hi,


I wanted to use QueryTools.GetFeaturesByColumnValue by ignoring the case. Is there a way I can accomlish this?


Also, whenever we specify a search column with "ReturningColumnsType.AllColumns", I get an error 


"An item with the same key has already been added.". The reason I think is that the library is trying to add the search column again and throws this error. So if I have 25 columns and to use this method I have to manually specify all the columns excluding the search column and beomes cumbersome. Is there any workarround for this?


 


Appreciate your help.


Thanks!



Hi Satish, 



For the error when you try to specify a search column with "ReturningColumnsType.AllColumns", I haven't reproduced it succeed, could you please sent me a simple sample for reproduce that? 



For the "use QueryTools.GetFeaturesByColumnValue by ignoring the case", I think the code as below will work for you. 

You can get the "resultFeatures" collection. 

 


            string columnName = "";

            string columnValue = "";


            Collection<feature></feature> allFeatures = layer.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns);

            Collection<feature></feature> resultFeatures = new Collection<feature></feature>
();


            for (int i = 0; i < allFeatures.Count; i++)

            {

                if (allFeatures.GetWellKnownBinary() != null && String.CompareOrdinal(allFeatures.ColumnValues[columnName].ToUpper(), columnValue.ToUpper()) == 0)

                {

                    resultFeatures.Add(allFeatures);

                }

            }
 




Regards, 



Don



  Thanks Don.



I was trying to avoid looping because I wanted to target a particular set from a set 5000 features.


Here is what I was trying for the columnvalue selection,


This one works, because I specifically say which FeatureColumns I need,


Dim countyFeatures As Collection(Of Feature) = countyLayer.QueryTools.GetFeaturesByColumnValue("State_Abbr", "PA", New String() {"Name"})


But this one throws an error,


Dim countyFeatures As Collection(Of Feature) = countyLayer.QueryTools.GetFeaturesByColumnValue("State_Abbr", "PA", ReturningColumnsType.AllColumns)


Appreciate your help!


Thanks




Hi Satish, 
  
 Loop 5000 features is very quickly, you don’t need to worry about the speed. 
  
 Could you please create a simple sample for your error? I think the problem caused by your other part of code so that I cannot reproduce it, layer.QueryTools.GetFeaturesByColumnValue(columnName, columnValue, ReturningColumnsType.AllColumns) works for me. 
  
 Regards, 
  
 Don

 


 


Hi Don,


 


Dim countyShapeFilePath As String = "\WorldMapKit\USA\Counties\Counties.shp"


Dim countyLayer As New ShapeFileFeatureLayer(countyShapeFilePath)


countyLayer.Open()


Dim countyFeatures As Collection(Of Feature) = countyLayer.QueryTools.GetFeaturesByColumnValue("State_Abbr", "PA", ReturningColumnsType.AllColumns)


countyLayer.Close()


Thanks
 

 



Hi Satish, 
  
 As below code works for me. 
  
  
  
 Dim countyShapeFilePath As String = “Maps\SampleData\USA\Counties.shp” 
  
 Dim countyLayer As New ShapeFileFeatureLayer(countyShapeFilePath) 
  
 countyLayer.Open() 
  
 Dim countyFeatures As Collection(Of Feature) = countyLayer.QueryTools.GetFeaturesByColumnValue(“STATE_NAME”, “Idaho”, ReturningColumnsType.AllColumns) 
  
 countyLayer.Close() 
  
  
  
 I changed the column value and column name because I haven’t found the “State_Abbr” column in my Counties.shp file. 
  
 So I think the problem should be in your shape file. Could you provide your counties.shp file so that I can test it. 
  
 Regards, 
  
 Don

Hi Don,


 Where should I upload the shape file?


Thanks



Hi Satish,  
  
 You can click the "Add Reply", then select your file in "Attachments" and then upload it. 
  
 Thanks 
  
 Don