public static async Task <SearchResults> GetResultsAsync(this MasterSideLetterDataAccess dataAccess, SearchRequest request)
        {
            var allResults = new SearchResults
            {
                FundRows       = new List <Fund>(),
                InvestorRows   = new List <Investor>(),
                SideLetterRows = new List <FundInvestor>(),
                ProvisionRows  = new List <Provision>()
            };

            if (request == null || request.IsEmpty())
            {
                return(allResults);
            }


            if (request.SearchCategory == "All" || request.SearchCategory == "Fund")
            {
                //only return Funds if the user specified Fund criteria or search text
                if (!string.IsNullOrEmpty(request.TargetText) ||
                    (request.FundValues != null && request.FundValues.Length > 0) ||
                    (request.SponsorValues != null && request.SponsorValues.Length > 0) ||
                    (request.BusinessUnitValues != null && request.BusinessUnitValues.Length > 0) ||
                    (request.StrategyValues != null && request.StrategyValues.Length > 0) ||
                    request.SizeMin.HasValue ||
                    request.SizeMax.HasValue ||
                    request.YearMin.HasValue ||
                    request.YearMax.HasValue)
                {
                    allResults.FundRows.AddRange(await dataAccess.SearchFundsAsync(request));
                }
            }

            if (request.SearchCategory == "All" || request.SearchCategory == "Investor")
            {
                //only return Investors if the user specified Investor criteria or search text
                if (!string.IsNullOrEmpty(request.TargetText) ||
                    (request.InvestorValues != null && request.InvestorValues.Length > 0) ||
                    (request.InvestorTypeValues != null && request.InvestorTypeValues.Length > 0) ||
                    request.AggregateSizeMin.HasValue ||
                    request.AggregateSizeMax.HasValue)
                {
                    allResults.InvestorRows.AddRange(await dataAccess.SearchInvestorsAsync(request));
                }
            }

            if (request.SearchCategory == "All" || request.SearchCategory == "SideLetter")
            {
                if (!string.IsNullOrEmpty(request.TargetText) ||
                    request.FundValues != null && request.FundValues.Length > 0 ||
                    request.InvestorValues != null && request.InvestorValues.Length > 0 ||
                    request.SponsorValues != null && request.SponsorValues.Length > 0 ||
                    request.BusinessUnitValues != null && request.BusinessUnitValues.Length > 0 ||
                    request.StrategyValues != null && request.StrategyValues.Length > 0 ||
                    request.InvestorTypeValues != null && request.InvestorTypeValues.Length > 0 ||
                    request.EntityValues != null && request.EntityValues.Length > 0 ||
                    request.CounselValues != null && request.CounselValues.Length > 0 ||
                    request.SizeMin.HasValue ||
                    request.SizeMax.HasValue ||
                    request.YearMin.HasValue ||
                    request.YearMax.HasValue ||
                    request.CommitmentMin.HasValue ||
                    request.CommitmentMax.HasValue ||
                    request.AggregateSizeMin.HasValue ||
                    request.AggregateSizeMax.HasValue ||
                    request.InvestorId.HasValue ||
                    request.FundId.HasValue)
                {
                    allResults.SideLetterRows.AddRange(await dataAccess.SearchFundInvestorsAsync(request));
                }
            }

            if (request.SearchCategory == "All" || request.SearchCategory == "Provision")
            {
                if (!string.IsNullOrEmpty(request.TargetText) ||
                    request.FundValues != null && request.FundValues.Length > 0 ||
                    request.InvestorValues != null && request.InvestorValues.Length > 0 ||
                    request.SponsorValues != null && request.SponsorValues.Length > 0 ||
                    request.BusinessUnitValues != null && request.BusinessUnitValues.Length > 0 ||
                    request.StrategyValues != null && request.StrategyValues.Length > 0 ||
                    request.InvestorTypeValues != null && request.InvestorTypeValues.Length > 0 ||
                    request.EntityValues != null && request.EntityValues.Length > 0 ||
                    request.CounselValues != null && request.CounselValues.Length > 0 ||
                    request.ProvisionTypeValues != null && request.ProvisionTypeValues.Length > 0 ||
                    request.SizeMin.HasValue ||
                    request.SizeMax.HasValue ||
                    request.YearMin.HasValue ||
                    request.YearMax.HasValue ||
                    request.CommitmentMin.HasValue ||
                    request.CommitmentMax.HasValue ||
                    request.AggregateSizeMin.HasValue ||
                    request.AggregateSizeMax.HasValue ||
                    request.InvestorId.HasValue ||
                    request.FundId.HasValue)
                {
                    allResults.ProvisionRows.AddRange(await dataAccess.SearchProvisionsAsync(request));
                }
            }

            return(allResults);
        }