Beispiel #1
0
        private static IQueryable <EFTypes.IndexedFile> Filter(TaggerDbContext dbContext, ProcessedInput userQuery)
        {
            var idsMatchingIncludeCriteria = FileIdsMatchingCriteria(dbContext, userQuery.IncludeTerms, Enumerable.All);
            var idsMatchingExcludeCriteria = FileIdsMatchingCriteria(dbContext, userQuery.ExcludeTerms, Enumerable.Any);

            return(dbContext.FileRecords
                   .Include(fileRec => fileRec.FileTagPairs)
                   .Where(fileRec => userQuery.IncludeTerms.Count == 0 ? true : idsMatchingIncludeCriteria.Contains(fileRec.Id))
                   .Where(fileRec => !idsMatchingExcludeCriteria.Contains(fileRec.Id)));
        }
Beispiel #2
0
        public static IEnumerable <EFTypes.IndexedFile> GetPage(TaggerDbContext dbContext, ProcessedInput userQuery, int itemsPerPage)
        {
            var page = Math.Max(1, userQuery.Page);

            return
                (Filter(dbContext, userQuery)
                 .Skip(itemsPerPage * (page - 1))
                 .Take(itemsPerPage)
                 .AsEnumerable());
        }
Beispiel #3
0
        private static ImmutableList <int> FileIdsMatchingCriteria(TaggerDbContext dbContext, ImmutableList <string> terms, Func <IEnumerable <ImmutableList <int> >, Func <ImmutableList <int>, bool>, bool> anyOrAll)
        {
            ImmutableList <ImmutableList <int> > fileIdsPerTerm =
                terms.Select
                    (s =>
                    (
                        from pair in dbContext.FileTagPairs
                        where EF.Functions.Like(pair.Tag, $"%{s}%")
                        select pair.FileRecordId
                    )
                    .ToImmutableList()
                    ).ToImmutableList();

            return(fileIdsPerTerm
                   .SelectMany(x => x)
                   .Distinct()
                   .Where(x => anyOrAll(fileIdsPerTerm, y => y.Contains(x)))
                   .ToImmutableList());
        }
Beispiel #4
0
 public FileListController(ILogger <FileListController> logger, TaggerDbContext dbContext)
 {
     _logger    = logger;
     _dbContext = dbContext;
 }