public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options) { //Mapper.Initialize(cfg => cfg.CreateMap<Project, ProjectResponse>() // .ForMember("OpenTasksCount", otc => otc.MapFrom(src => src.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed)))); IQueryable <ProjectResponse> query = _context.Projects .Select(p => Mapper.Map <ProjectResponse>(p)); //{ // Id = p.Id, // Name = p.Name, // Description = p.Description, // OpenTasksCount = p.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed) //} query = ApplyFilter(query, filter); int totalCount = await query.CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <ProjectResponse> { Items = await query.ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <TaskResponse> > RunAsync(TaskFilter filter, ListOptions options) { var task = _context.Tasks .Include(t => t.Tags).ThenInclude(tt => tt.Tag) .Include(p => p.Project); IQueryable <TaskResponse> query = task .Select(p => Mapper.Map <TaskResponse>(p)); query = ApplyFilter(query, filter); int totalCount = await query.CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <TaskResponse> { Items = await query.ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <TagResponse> > RunAsync(TagFilter filter, ListOptions options) { var tags = _uow.Tags.Query(t => t.Tasks); foreach (var tag in tags) { tag.Tasks = _uow.TagsInTasks.Query(t => t.Task).Where(t => t.TagId == tag.Id).ToList(); } await _factory.CreateAsyncQueryable(tags).LoadAsync(); var query = tags.ProjectTo <TagResponse>(); query = ApplyFilter(query, filter); int totalCount = await _factory.CreateAsyncQueryable(query).CountAsync(); if (options.Sort == null) { options.Sort = "Name"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <TagResponse> { Items = await _factory.CreateAsyncQueryable(query).ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options) { IQueryable <ProjectResponse> query = Context.Set <Project>() .Select(p => new ProjectResponse { Id = p.Id, Name = p.Name, Description = p.Description, OpenTasksCount = p.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed) }); query = ApplyFilter(query, filter); int totalCount = await query.CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <ProjectResponse> { Items = await query.ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options) { var q = _uow.Projects.Query(t => t.Tasks, t => t.User); await _factory.CreateAsyncQueryable(q).LoadAsync(); var query = q.ProjectTo <ProjectResponse>(); query = ApplyFilter(query, filter); int totalCount = await _factory.CreateAsyncQueryable(query).CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <ProjectResponse> { Items = await _factory.CreateAsyncQueryable(query).ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <TaskResponse> > RunAsync(TaskFilter filter, ListOptions options) { int totalCount = 0; var tasks = _uow.Tasks.Query(t => t.Tags, t => t.Project.Tasks, t => t.Project.User); foreach (var task in tasks) { task.Tags = _uow.TagsInTasks.Query(t => t.Tag).Where(t => t.TaskId == task.Id).ToList(); } await _factory.CreateAsyncQueryable(tasks).LoadAsync(); var query = tasks.ProjectTo <TaskResponse>(); query = ApplyFilter(query, filter); totalCount = query.Count(); //после фильтрации по тегу происходит какая-то магия и ассинхронные функции перестают работать //totalCount = await query.CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <TaskResponse> { Items = query.ToList(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); }
public async Task <ListResponse <AccountResponse> > RunAsync(AccountFilter filter, ListOptions options) { IQueryable <AccountResponse> query = _context.Accounts.Select(t => new AccountResponse { Balance = t.Balance, Name = t.Name, Id = t.Id }); query = ApplyFilter(query, filter); int totalCount = await query.CountAsync(); query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <AccountResponse> { TotalItemsCount = totalCount, Items = await query.ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? -1, Sort = options.Sort ?? "-Id" }); }
public async Task <ListResponse <UserResponse> > RunAsync(UserFilter filter, ListOptions options) { IQueryable <UserResponse> query = _context.Users .ProjectTo <UserResponse>(); query = ApplyFilter(query, filter); int totalCount = await query.CountAsync(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <UserResponse> { Items = await query.ToListAsync(), Page = options.Page, PageSize = options.PageSize ?? -1, Sort = options.Sort ?? "-Id", TotalItemsCount = totalCount }); }
public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options) { using (var con = _connection.GetConnection()) { var projectsDictionary = new Dictionary <int, Project>(); var cmd = "select * from Projects p left join Tasks t on p.Id=t.ProjectId"; con.Query <Project, Task, Project>(cmd, (pr, task) => { Project project; if (!projectsDictionary.TryGetValue(pr.Id, out project)) { project = pr; project.Tasks = new List <Task>(); projectsDictionary.Add(project.Id, project); } project = projectsDictionary[pr.Id]; if (task != null) { project.Tasks.Add(task); } return(project); }); var projects = projectsDictionary.Values.ToList(); var prs = new List <ProjectResponse>(); foreach (var pr in projects) { prs.Add(new ProjectResponse { Id = pr.Id, Name = pr.Name, Description = pr.Description, OpenTasksCount = pr.OpenTasksCount }); } IQueryable <ProjectResponse> query = prs.AsQueryable(); query = ApplyFilter(query, filter); int totalCount = query.Count(); if (options.Sort == null) { options.Sort = "Id"; } query = options.ApplySort(query); query = options.ApplyPaging(query); return(new ListResponse <ProjectResponse> { Items = query.ToList(), Page = options.Page, PageSize = options.PageSize ?? totalCount, Sort = options.Sort, TotalItemsCount = totalCount }); } }