public async Task <ListViewModel <GroupViewModel> > GetGroupsByFilterAsync(string name, int?skipCount, int?takeCount, bool isOrderByDescending) { Expression <Func <Group, bool> > predicate = null; if (!string.IsNullOrEmpty(name)) { predicate = x => x.Name.ToLower().Contains(name.Trim().ToLower()); } var groupsCount = await _repository.CountAsync(predicate); var groupsList = await _repository.ListAsync(predicate : predicate, orderBy : x => x.Name, isOrderByDescending : isOrderByDescending, skipCount : skipCount, takeCount : takeCount, (gr) => gr.StudentGroups); var groupViewList = groupsList.Select(x => new GroupViewModel(x.Id, x.Name, x.StudentGroups.Count)); return(new ListViewModel <GroupViewModel>(skipCount, takeCount, groupsCount, groupViewList)); }