示例#1
0
        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]);