public override void Execute() { var members = Users.GetAllFull().Where(m => m.displayname.ToLower().Contains(_Filter)).ToList(); MembersResponse res = new MembersResponse(members); Response = JsonConvert.SerializeObject(res); }
private async Task <string> GetMembers(string index, int page, FieldModel field) { return((await _cache.GetOrCreateAsync(index + field.UniqueName, async(cacheEntry) => { cacheEntry.SetSize(1); JsonSerializerOptions options = new JsonSerializerOptions { Converters = { new MembersResponseJsonConverter() } }; IDataStructure data = await LoadData(index); var namesAndTypes = data.GetNameAndTypes(); DataSlice dataSlice = new DataSlice(data); List <object> members = null; bool sorted = false; if (namesAndTypes[field.UniqueName] == ColumnType.stringType) { var column = DataSlice.Data.GetColumn <string>(field.UniqueName); var stringMembers = dataSlice.DataColumnIndexes.Select(index => column[index]).Distinct().ToList(); if (stringMembers.Count != 0) { var first = stringMembers.First(); if (Enum.TryParse(first.ToString(), out Month m) || Enum.TryParse(first.ToString(), out ShortMonth m1)) { stringMembers.Sort(new MonthComparator <string>()); sorted = true; } } members = stringMembers.ConvertAll <object>(new Converter <string, object>(str => (object)str)); } else { var column = DataSlice.Data.GetColumn <double?>(field.UniqueName); members = dataSlice.DataColumnIndexes.Select(index => column[index] as object).Distinct().ToList(); } int pageTotal = (int)Math.Ceiling(members.Count / (double)MEMBERS_PAGE_SIZE); pageTotal = pageTotal == 0 ? 1 : pageTotal; string[] responses = new string[pageTotal]; int currentPage = 0; while (currentPage < pageTotal) { MembersResponse response = new MembersResponse(); response.Sorted = sorted; response.Page = currentPage; response.PageTotal = pageTotal; int from = currentPage * MEMBERS_PAGE_SIZE; int size = Math.Min(members.Count, from + MEMBERS_PAGE_SIZE); for (int i = from; i < size; i++) { response.Members.Add(members[i]); } responses[currentPage] = JsonSerializer.Serialize(response, options); currentPage++; } return responses; }))[page]);