public SearchResponse Search(string searchTerm) { if (string.IsNullOrWhiteSpace(searchTerm) || searchTerm.Trim().Length < 2) { return(new SearchResponse()); } IEnumerable <DomainObjects.Advisor.Advisor> advisors = null; IEnumerable <DomainObjects.Asset.Asset> assets = null; Parallel.Invoke(() => advisors = AdvisorBusiness.ListByName(searchTerm), () => assets = AssetBusiness.ListByNameOrCode(searchTerm)); if (!assets.Any() && !advisors.Any()) { return(new SearchResponse()); } var response = new SearchResponse(); foreach (DomainObjects.Advisor.Advisor advisor in advisors) { response.Advisors.Add(new SearchResponse.AdvisorResult() { Id = advisor.Id, Description = advisor.Description, Name = advisor.Name, UrlGuid = advisor.UrlGuid.ToString() }); } foreach (DomainObjects.Asset.Asset asset in assets) { response.Assets.Add(new SearchResponse.AssetResult() { Id = asset.Id, Code = asset.Code, Name = asset.Name, MarketCap = asset.MarketCap, CirculatingSupply = asset.CirculatingSupply }); } response.Advisors = response.Advisors.OrderBy(c => c.Name).ToList(); response.Assets = response.Assets.OrderByDescending(c => c.MarketCap).ThenBy(c => c.Name).ToList(); return(response); }