public IHttpActionResult Get([FromUri] string[] videoNumbers, [FromUri] string[] featureType, [FromUri] string[] queries, [FromUri] string[] operatorStrings) { string[] operators = new string[] { "AND", "OR", "NOT" }; string[] specialCharacters = new string[] { "\"" }; List <SearchResult> searchResults = new List <SearchResult>(); List <string> words = new List <String>(); foreach (var videoNumber in videoNumbers) { ArrayList tempResults = new ArrayList(); var shortInstances = new List <ResultInstance>(); tempResults.Add(dbOperations.SearchForString(videoNumber.ToString(), featureType[0], queries[0])); for (int i = 1; i < queries.Count(); i++) { tempResults.Add(operatorStrings[i - 1]); tempResults.Add(dbOperations.SearchForString(videoNumber.ToString(), featureType[i], queries[i])); } foreach (var op in operators) { for (int i = 0; i < tempResults.Count; i++) { if (tempResults[i] is string && (string)tempResults[i] == op) { SearchOperatorFactory searchOperatorFactory = new SearchOperatorFactory(); SearchOperator searchOperator = searchOperatorFactory.getSearchOperator((string)tempResults[i]); if (searchOperator.getNumberOfParameters() == 2) { searchOperator.AddLeft((List <ResultInstance>)tempResults[i - 1]); } searchOperator.AddRight((List <ResultInstance>)tempResults[i + 1]); tempResults[i] = searchOperator.ApplyOperator(); tempResults.RemoveAt(i - 1); tempResults.RemoveAt(i); } } } foreach (var tempResult in tempResults) { foreach (var tr in (List <ResultInstance>)tempResult) { shortInstances.Add((ResultInstance)tr); } } searchResults.Add(new SearchResult { videoName = dbOperations.GetVideoStats(videoNumber).videoName, resultInstances = shortInstances }); } return(Ok(searchResults)); }