Beispiel #1
0
        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);
            }
        }
Beispiel #2
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);
        }
Beispiel #3
0
        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);
        }