public async Task <PagedList <UserModel> > GetUsersAsync(ListOptions listOptions, UserFilter filter) { var users = Context.Users.Include(u => u.Identity).AsQueryable(); Expression <Func <User, bool> > predicate = null; if (filter != null) { if (filter.GroupId.HasValue) { predicate = predicate.AndAlso(u => u.GroupId == filter.GroupId); } if (filter.RoleId.HasValue) { predicate = predicate.AndAlso(u => u.Identity.RoleId == filter.RoleId); } if (filter.AccountVerified.HasValue) { predicate.AndAlso(u => u.Identity.EmailConfirmed == filter.AccountVerified); } if (filter.CreateDateAfter.HasValue) { predicate = predicate.AndAlso(u => u.Identity.RegistrationDate >= filter.CreateDateAfter); } if (filter.CreateDateAfter.HasValue) { predicate = predicate.AndAlso(u => u.Identity.RegistrationDate <= filter.CreateDateBefore); } if (string.IsNullOrEmpty(filter.EmailQuery)) { predicate = predicate.AndAlso(u => u.Identity.Email.Contains(filter.EmailQuery)); } if (string.IsNullOrEmpty(filter.NameQuery)) { predicate = predicate.AndAlso(u => $"{u.SecondName} {u.FirstName} {u.Patronymic}".Contains(filter.NameQuery)); } } int totalItemCount; if (predicate != null) { users = users.Where(predicate); totalItemCount = await Context.Users.CountAsync(predicate); } else { totalItemCount = await Context.Users.CountAsync(); } var result = listOptions.CreatePagedList <UserModel>(totalItemCount); users = listOptions.TakeFrom(users); var userList = await users.ToListAsync(); result.AddRange(Mapper.Map <IEnumerable <User>, IEnumerable <UserModel> >(userList)); return(result); }
public async Task <PagedList <FileModel> > GetRepositoryFilesAsync(Guid repositoryId, ListOptions listOptions, RepositoryFileFilter filter = null) { IQueryable <File> files = Context.RepositoryFiles .Where(f => f.RepositoryId == repositoryId) .Select(f => f.File); Expression <Func <File, bool> > predicate = null; if (filter != null) { if (!string.IsNullOrWhiteSpace(filter.SearchString)) { predicate = predicate.AndAlso(f => f.FileName.ToLower().Contains(filter.SearchString.ToLower())); } if (!string.IsNullOrWhiteSpace(filter.Extension)) { predicate.AndAlso(f => f.FileName.Split('.').Last() == filter.Extension); } if (filter.UploadDateAfter.HasValue) { predicate = predicate.AndAlso(f => f.UploadDate >= filter.UploadDateAfter.Value); } if (filter.UploadDateBefore.HasValue) { predicate = predicate.AndAlso(f => f.UploadDate <= filter.UploadDateBefore); } } int count; if (predicate != null) { files = files.Where(predicate); count = await Context.FileModels.CountAsync(predicate); } else { count = await Context.FileModels.CountAsync(); } var result = listOptions.CreatePagedList <FileModel>(count); if (count == 0) { return(result); } files = files.OrderBy(f => f.UploadDate); files = listOptions.TakeFrom(files); var list = await files.ToListAsync(); result.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(list)); return(result); }
public async Task <PagedList <FileModel> > GetFilesAsync(ListOptions listOptions, FileFilter filter = null) { IQueryable <File> query = Context.FileModels; Expression <Func <File, bool> > predicate = null; if (filter != null) { if (!string.IsNullOrWhiteSpace(filter.SearchString)) { predicate = predicate.AndAlso(f => f.FileName.ToLower().Contains(filter.SearchString.ToLower())); } if (!string.IsNullOrWhiteSpace(filter.Extension)) { predicate.AndAlso(f => f.FileName.Split('.').Last() == filter.Extension); } if (filter.MessageId != null) { predicate = predicate.AndAlso(f => f.Messages.Select(m => m.MessageId).Contains(filter.MessageId.Value)); } else if (filter.ThemeId != null) { predicate = predicate.AndAlso(f => f.Messages.Select(m => m.Message.ThemeId).Contains(filter.ThemeId.Value)); } } int count; if (predicate != null) { query = query.Where(predicate); count = await Context.FileModels.CountAsync(predicate); } else { count = await Context.FileModels.CountAsync(); } var list = listOptions.CreatePagedList <FileModel>(count); query = listOptions.TakeFrom(query); var files = await query.ToListAsync(); list.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(files)); return(list); }
public async Task <PagedList <FileModel> > GetRepositoryFilesAsync(Guid repositoryId, ListOptions listOptions) { int count = await Context.RepositoryFiles.Distinct().CountAsync(m => m.RepositoryId == repositoryId); var result = listOptions.CreatePagedList <FileModel>(count); if (count == 0) { return(result); } IQueryable <File> files = Context.RepositoryFiles .Where(f => f.RepositoryId == repositoryId).Distinct() .Select(f => f.File) .OrderBy(f => f.UploadDate); files = listOptions.TakeFrom(files); var list = await files.ToListAsync(); result.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(list)); return(result); }
public async Task <PagedList <GroupModel> > GetGroupsAsync(string searchString, ListOptions listOptions = null) { Expression <Func <Group, bool> > predicate = g => true; if (string.IsNullOrEmpty(searchString)) { predicate.AndAlso(g => g.Name.ToLower().StartsWith(searchString.ToLower())); } var query = Context.Groups.OrderBy(g => g.Name).Where(predicate).AsQueryable(); int count = await Context.Groups.CountAsync(predicate); var list = listOptions.CreatePagedList <GroupModel>(count); query = listOptions.TakeFrom(query); var groups = await query.Select(g => new GroupModel { Id = g.Id, Name = g.Name }).ToListAsync(); list.AddRange(groups); return(list); }