public IHttpActionResult GetVotersWhere([FromUri] VotersRequest request) { request = request == null ? new VotersRequest() : request; var result = _votersRepository.GetVotersWhere(request); if (result != null) { var json = new JObject() as dynamic; json.result = new JArray(JArray.FromObject(result)); json.start = request.Start + request.Limit; return(Ok(json)); } return(NotFound()); }
public IEnumerable <Dictionary <string, JToken> > GetVotersWhere(VotersRequest request) { var voters = new List <Dictionary <string, JToken> >(); using (var r = new StreamReader(_data)) { using (var reader = new JsonTextReader(r)) { do { reader.Read(); if (reader.Value == null || !reader.Value.Equals("data")) { if (reader.TokenType == JsonToken.PropertyName) { reader.Skip(); } continue; } reader.Read(); while (reader.Read() && reader.TokenType != JsonToken.EndArray) { JsonSerializer s = new JsonSerializer(); JArray row = s.Deserialize <JArray>(reader); var party = request.Party == VotersRequest.PartyEnum.Any ? "" : "|" + request.Party.ToString(); party += (request.Status == VotersRequest.StatusEnum.Any ? "" : " - " + request.Status.ToString()); var allowedColumns = "County|Date|Grand Total" + party; var result = new Dictionary <string, JToken>(); int currentColumn = 0; foreach (var column in row.Take(24).Values()) { if (Regex.IsMatch(Columns[currentColumn], allowedColumns)) { result.Add(Columns[currentColumn], column); } currentColumn++; } if ((string.IsNullOrEmpty(request.County) || request.County == ((JValue)result["County"]).ToObject <string>().ToLower()) && (request.Month == 0 || request.Month == ((JValue)result["Date"]).ToObject <DateTime>().Month)) { voters.Add(result); } } } while(reader.TokenType != JsonToken.None); } } return(voters.Count > 0 ? new List <Dictionary <string, JToken> >(voters.Skip(request.Start).Take(request.Limit)) : null); }