Beispiel #1
0
        public async Task <FindResponse <CaseFileAggregate> > Find(FindCaseFilesParameter parameter, CancellationToken token)
        {
            using (var lck = await _caseManagementDbContext.Lock())
            {
                IQueryable <CaseFileModel> result = _caseManagementDbContext.CaseFiles;
                if (!string.IsNullOrWhiteSpace(parameter.Owner))
                {
                    result = result.Where(r => r.Owner == parameter.Owner);
                }

                if (!string.IsNullOrWhiteSpace(parameter.Text))
                {
                    result = result.Where(r => r.Name.IndexOf(parameter.Text, StringComparison.InvariantCultureIgnoreCase) >= 0);
                }

                if (!string.IsNullOrWhiteSpace(parameter.CaseFileId))
                {
                    result = result.Where(r => r.FileId == parameter.CaseFileId);
                }

                if (MAPPING_WORKFLOWDEFINITIONFILE_TO_PROPERTYNAME.ContainsKey(parameter.OrderBy))
                {
                    result = result.InvokeOrderBy(MAPPING_WORKFLOWDEFINITIONFILE_TO_PROPERTYNAME[parameter.OrderBy], parameter.Order);
                }

                int totalLength = result.Count();
                result = result.Skip(parameter.StartIndex).Take(parameter.Count);
                var content = await result.ToListAsync(token);

                if (parameter.TakeLatest)
                {
                    content = content.OrderByDescending(r => r.Version).GroupBy(r => r.FileId).Select(r => r.First()).ToList();
                }

                return(new FindResponse <CaseFileAggregate>
                {
                    StartIndex = parameter.StartIndex,
                    Count = parameter.Count,
                    TotalLength = totalLength,
                    Content = content.Select(_ => _.ToDomain()).ToList()
                });
            }
        }
        public Task <FindResponse <CaseFileAggregate> > Find(FindCaseFilesParameter parameter, CancellationToken token)
        {
            IQueryable <CaseFileAggregate> result = _caseFileDefinitions.AsQueryable();

            if (parameter.TakeLatest)
            {
                result = result.OrderByDescending(r => r.Version);
                result = result.GroupBy(r => r.FileId).Select(r => r.First());
            }

            if (!string.IsNullOrWhiteSpace(parameter.Owner))
            {
                result = result.Where(r => r.Owner == parameter.Owner);
            }

            if (!string.IsNullOrWhiteSpace(parameter.Text))
            {
                result = result.Where(r => r.Name.IndexOf(parameter.Text, StringComparison.InvariantCultureIgnoreCase) >= 0);
            }

            if (!string.IsNullOrWhiteSpace(parameter.CaseFileId))
            {
                result = result.Where(r => r.FileId == parameter.CaseFileId);
            }

            if (MAPPING_WORKFLOWDEFINITIONFILE_TO_PROPERTYNAME.ContainsKey(parameter.OrderBy))
            {
                result = result.InvokeOrderBy(MAPPING_WORKFLOWDEFINITIONFILE_TO_PROPERTYNAME[parameter.OrderBy], parameter.Order);
            }

            int totalLength = result.Count();

            result = result.Skip(parameter.StartIndex).Take(parameter.Count);
            return(Task.FromResult(new FindResponse <CaseFileAggregate>
            {
                StartIndex = parameter.StartIndex,
                Count = parameter.Count,
                TotalLength = totalLength,
                Content = (ICollection <CaseFileAggregate>)result.ToList()
            }));
        }