private async Task <ProteinSearchViewModel> Search(ProteinSearchQuery psq, int pageIndex)
        {
            var model = await CreateModel(psq, pageIndex);

            var query = FaToolDbEntities
                        .GetProteinSearchValues(psq.SearchOption, psq.SourceOrganismID)
                        .Where(pv => pv.Value.Contains(psq.SearchValue));

            int numResults = await query.CountAsync();

            if (numResults == 0)
            {
                model.StatusDescription = "Query does not return any results.";
            }
            else
            {
                int numPages = DataPaging.CalculatePageCount(numResults);
                pageIndex = DataPaging.FixPageIndex(numPages, pageIndex);
                int skip = DataPaging.CalculateSkipCount(numResults, pageIndex);

                var proteinValues = await query
                                    .OrderBy(x => x.Value)
                                    .ThenBy(x => x.TermName)
                                    .ThenBy(x => x.ProteinName)
                                    .Skip(skip)
                                    .Take(DataPaging.PageSize)
                                    .ToArrayAsync();

                model.Results = proteinValues
                                .Select(CreateItem)
                                .ToArray();

                model.StatusDescription = CreateDescription(numResults, numPages, pageIndex);
            }

            return(model);
        }