public async Task <IEnumerable <ToDoList> > GetAllAsync(ListQueryDataStructure queryDataStructure) { var builder = Builders <ToDoListEntity> .Filter; var filter = ApplyWhereStatement(builder, queryDataStructure); var lists = (await _toDoListMongoRepository.GetWithExpressionAsync(filter)).ToList(); foreach (var list in lists) { var tasks = (await _toDoTaskMongoRepository.GetWithExpressionAsync(x => x.ListId == list.Id)).ToList(); list.InsertTasks(tasks); foreach (var task in tasks) { var subTasks = (await _toDoSubTaskMongoRepository.GetWithExpressionAsync(x => x.TaskId == task.Id)) .ToList(); task.InsertSubTasks(subTasks); } } return(lists); }
private FilterDefinition <ToDoListEntity> ApplyWhereStatement(FilterDefinitionBuilder <ToDoListEntity> builder, ListQueryDataStructure queryDataStructure) { FilterDefinition <ToDoListEntity> filter = builder.Ne(x => x.Status, (int)ToDoListStatus.Archived); if (queryDataStructure.Id.HasValue) { filter = filter & (builder.Eq(x => x.Id, queryDataStructure.Id.Value)); } if (queryDataStructure.UserId.HasValue) { filter = filter & (builder.Eq(x => x.UserId, queryDataStructure.UserId.Value)); } if (!string.IsNullOrWhiteSpace(queryDataStructure.Name)) { filter = filter & (builder.Regex(x => x.Name, queryDataStructure.Name)); } if (queryDataStructure.Statuses != null && queryDataStructure.Statuses.Any()) { filter = filter & (builder.In(x => x.Status, queryDataStructure.Statuses)); } return(filter); }