public SearchResultModel <ScenarioDigestListItem> MinimalDataSearch( SearchQueryDto queryModel, bool isLibraried, IEnumerable <int> passesToInclude) { lock (_session) { IReadOnlyCollection <ScenarioDigestListItem> allRecords = _session.GetAllUsingProjection <Scenario, Scenarios_MinimalData, ScenarioDigestListItem> (s => s.IsLibraried.HasValue && s.IsLibraried.Value == isLibraried); List <ScenarioDigestListItem> searchQuery = allRecords.ToList(); if (!string.IsNullOrWhiteSpace(queryModel.Title)) { searchQuery.RemoveAll(x => DoesNotContainTitle(queryModel.Title, x.Name)); } if (passesToInclude.Any()) { IEnumerable <ScenarioDigestListItem> scenariosWithPassesToInclude = allRecords .Where(scenario => scenario.Passes.Any(pass => passesToInclude.Contains(pass.Id)) && !searchQuery.Contains(scenario)); searchQuery.AddRange(scenariosWithPassesToInclude); } IOrderedEnumerable <ScenarioDigestListItem> orderQuery = queryModel.OrderDirection == OrderDirection.Desc ? searchQuery.OrderByDescending(OrderByProperty(queryModel.OrderBy)) : searchQuery.OrderBy(OrderByProperty(queryModel.OrderBy)); var searchResults = new SearchResultModel <ScenarioDigestListItem>(); searchResults.Items = orderQuery .Skip(queryModel.Skip) .Take(queryModel.Top) .ToList(); searchResults.TotalCount = orderQuery.Count(); return(searchResults); } Func <ScenarioDigestListItem, object> OrderByProperty(OrderBy orderBy) { if (OrderBy.Date == orderBy) { return(x => x.DateUserModified); } else { return(x => x.Name); } } bool DoesNotContainTitle(string title, string scenarioDigestName) { return(scenarioDigestName.IndexOf(title, StringComparison.CurrentCultureIgnoreCase) < 0); } }
public IEnumerable <ProductAdvertiserModel> GetAdvertisers(ICollection <string> advertiserIds) { var distinctAdvertiserIds = advertiserIds.Distinct().ToList(); var result = new Dictionary <string, ProductAdvertiserModel>(); for (int i = 0, page = 0; i < distinctAdvertiserIds.Count; i += MaxClauseCount, page++) { var ids = distinctAdvertiserIds.Skip(MaxClauseCount * page).Take(MaxClauseCount).ToArray(); var advertisersBatch = _session.GetAllUsingProjection <Product, Product_BySearch, ProductAdvertiserModel>(x => x.AdvertiserIdentifier.In(ids)); foreach (var item in advertisersBatch) { if (!result.ContainsKey(item.AdvertiserIdentifier)) { result.Add(item.AdvertiserIdentifier, item); } } } return(result.Values); }
public IEnumerable <ClashNameModel> GetDescriptionByExternalRefs(ICollection <string> externalRefs) { var distinctExternalRefs = externalRefs.Distinct().ToList(); var result = new List <ClashNameModel>(); for (int i = 0, page = 0; i < distinctExternalRefs.Count; i += MaxClauseCount, page++) { var ids = distinctExternalRefs.Skip(MaxClauseCount * page).Take(MaxClauseCount).ToArray(); result.AddRange(_session.GetAllUsingProjection <Clash, Clash_BySearch, ClashNameModel>(x => x.Externalref.In(ids))); } return(result); }