public Task <SearchResult <UMAResource> > Find(SearchUMAResourceParameter searchRequestParameter)
        {
            var filteredUmaResources = _umaResources.AsQueryable();

            if (!string.IsNullOrWhiteSpace(searchRequestParameter.Subject))
            {
                filteredUmaResources = filteredUmaResources.Where(f => f.Subject == searchRequestParameter.Subject);
            }

            int totalResults = _umaResources.Count();

            if (searchRequestParameter.SortKey == "CreateDateTime")
            {
                switch (searchRequestParameter.SortOrder)
                {
                case SearchRequestOrders.ASC:
                    filteredUmaResources = filteredUmaResources.OrderBy(p => p.CreateDateTime);
                    break;

                case SearchRequestOrders.DESC:
                    filteredUmaResources = filteredUmaResources.OrderByDescending(p => p.CreateDateTime);
                    break;
                }
            }

            filteredUmaResources = filteredUmaResources.Skip(searchRequestParameter.StartIndex).Take(searchRequestParameter.Count);
            return(Task.FromResult(new SearchResult <UMAResource>
            {
                Records = filteredUmaResources.ToList(),
                TotalResults = totalResults
            }));
        }
        public async Task <SearchResult <UMAResource> > Find(SearchUMAResourceParameter searchUMAResourceParameter, CancellationToken cancellationToken)
        {
            IQueryable <UMAResource> resources = GetResources();

            if (!string.IsNullOrWhiteSpace(searchUMAResourceParameter.Subject))
            {
                resources = resources.Where(f => f.Subject == searchUMAResourceParameter.Subject);
            }

            int totalResults = await resources.CountAsync(cancellationToken);

            if (searchUMAResourceParameter.SortKey == "CreateDateTime")
            {
                switch (searchUMAResourceParameter.SortOrder)
                {
                case SearchRequestOrders.ASC:
                    resources = resources.OrderBy(p => p.CreateDateTime);
                    break;

                case SearchRequestOrders.DESC:
                    resources = resources.OrderByDescending(p => p.CreateDateTime);
                    break;
                }
            }

            var records = await resources.Skip(searchUMAResourceParameter.StartIndex).Take(searchUMAResourceParameter.Count).ToListAsync(cancellationToken);

            return(new SearchResult <UMAResource>
            {
                Records = records,
                TotalResults = totalResults
            });
        }
        public async Task <IActionResult> SearchResources(CancellationToken cancellationToken)
        {
            var searchUMAResourceParameter = new SearchUMAResourceParameter();

            EnrichSearchRequestParameter(searchUMAResourceParameter);
            var searchResult = await _umaResourceRepository.Find(searchUMAResourceParameter, cancellationToken);

            var result = new JObject
            {
                { "totalResults", searchResult.TotalResults },
                { "count", searchUMAResourceParameter.Count },
                { "startIndex", searchUMAResourceParameter.StartIndex },
                { "data", new JArray(searchResult.Records.Select(rec => ResourcesAPIController.Serialize(rec))) }
            };

            return(new OkObjectResult(result));
        }
        private async Task <IActionResult> InternalSearch(CancellationToken cancellationToken, string subject = null)
        {
            var searchUMAResourceParameter = new SearchUMAResourceParameter();

            EnrichSearchRequestParameter(searchUMAResourceParameter);
            searchUMAResourceParameter.Subject = subject;
            var searchResult = await _umaResourceRepository.Find(searchUMAResourceParameter, cancellationToken);

            var result = new JObject
            {
                { "totalResults", searchResult.TotalResults },
                { "count", searchUMAResourceParameter.Count },
                { "startIndex", searchUMAResourceParameter.StartIndex },
                { "data", new JArray(searchResult.Records.Select(rec => Serialize(rec))) }
            };

            return(new OkObjectResult(result));
        }