помогите разобраться в следующем плс: на данный момент настроил пагинацию и сортировку, но для некоторыx условий, которые я задаю в ангуляре так же необходимо знать общее количество страниц. По порядку, на сегодняшний день все работает хорошо, однако мне не нравится сам код, решил его переписать и в одном моменте столкнулся с проблемой. Код работает сейчас так: Метод в контроллере который отправляет клиентов:
[HttpGet("[action]")]
[HttpGet("[action]/{page}")]
[HttpGet("[action]/{page}/{size}")]
[HttpGet("[action]/{page}/{size}/{order}")]
public IActionResult GetCustomers(int page = 1, int size = 3, string order="")
{
var customers=db.Customers.Include(x => x.CustomerProducts).ThenInclude(x => x.Product).AsQueryable();
switch (order)
{
case "Name":
customers = customers.OrderBy(s => s.Name);
break;
case "NameDesc":
customers = customers.OrderByDescending(s => s.Name);
break;
case "Address":
customers = customers.OrderBy(s => s.Address);
break;
case "AddressDesc":
customers = customers.OrderByDescending(s => s.Address);
break;
case "PhoneNumber":
customers = customers.OrderBy(s => s.PhoneNumber);
break;
case "PhoneNumberDesc":
customers = customers.OrderByDescending(s => s.PhoneNumber);
break;
}
List<CustomerViewModel> cusvm = customers
.Skip((page - 1) * size)
.Take(size)
.ToList()
.Select(c => new CustomerViewModel
{
Id = c.Id,
Name = c.Name,
Address = c.Address,
PhoneNumber = c.PhoneNumber,
Products = c.CustomerProducts.Select(x=>new ProductViewModel(x)).ToList()
}).ToList();
return Ok(cusvm);
}
метод датаСервиса:
getCustomers(page: number, size = 2, order:string) {
return this.http.get(`api/customers/GetCustomers/${page}/${size}/${order}`);
}
и запрос в компоненте:
customersList: Customer[];
TotalPage: number[]=[];//Общее количество страниц
page: number = 1;//Первая страница
size: number = 5;//Количество строк на странице
order: string = '';
reverse: boolean = false;
constructor(private dataService: DataService) {}
ngOnInit() {
this.load();
}
load() {
this.dataService.getCustomers(this.page, this.size, this.order).subscribe((data: Customer[]) => this.customersList = data);
}
далее мне нужно общее количество страниц, я получаю их так: Метод контроллера
[HttpGet]
public IActionResult GetCustomersTotalPage()
{
var count = db.Customers.Count();
int size = 5;
var res = Math.Ceiling(count / (double)size);
List<int> TotalPage = new List<int>();
for(var i =1; i <= res; i++)
{
TotalPage.Add(i);
}
return Ok(TotalPage);
}
метод датаСервиса:
getCustomersTotalPage() {
return this.http.get(this.url);
}
Компонент:
load() {
this.dataService.getCustomersTotalPage().subscribe((data: number[]) => this.TotalPage = data);
}
в итоге компонент выглядит следующим образом:
@Component({
templateUrl: './customer-list.component.html'
})
export class CustomerListComponent implements OnInit {
customersList: Customer[];
TotalPage: number[]=[];//Общее количество страниц
page: number = 1;//Первая страница
size: number = 5;//Количество строк на странице
order: string = '';
reverse: boolean = false;
constructor(private dataService: DataService) {}
ngOnInit() {
this.load();
}
load() {
this.dataService.getCustomers(this.page, this.size, this.order).subscribe((data: Customer[]) => this.customersList = data);
this.dataService.getCustomersTotalPage().subscribe((data: number[]) => this.TotalPage = data);
}
Воот, т.к. в контроллере мне не нравится что я использую 2 гет метода, я решил все совместить в один, создал отдельно вью модель:
public class IndexViewModel
{
public IEnumerable<CustomerViewModel> Customers { get; set; }
public List<int> TotalPage { get; set; }
}
переписал метод контроллера:
public IActionResult GetCustomers(int page = 1, int size = 3, string order="")
{
var customers=db.Customers.Include(x => x.CustomerProducts).ThenInclude(x => x.Product).AsQueryable();
switch (order)
{
case "Name":
customers = customers.OrderBy(s => s.Name);
break;
case "NameDesc":
customers = customers.OrderByDescending(s => s.Name);
break;
case "Address":
customers = customers.OrderBy(s => s.Address);
break;
case "AddressDesc":
customers = customers.OrderByDescending(s => s.Address);
break;
case "PhoneNumber":
customers = customers.OrderBy(s => s.PhoneNumber);
break;
case "PhoneNumberDesc":
customers = customers.OrderByDescending(s => s.PhoneNumber);
break;
}
List<CustomerViewModel> cusvm = customers
.Skip((page - 1) * size)
.Take(size)
.ToList()
.Select(c => new CustomerViewModel
{
Id = c.Id,
Name = c.Name,
Address = c.Address,
PhoneNumber = c.PhoneNumber,
Products = c.CustomerProducts.Select(x=>new ProductViewModel(x)).ToList()
}).ToList();
var count = db.Customers.Count();
var res = Math.Ceiling(count / (double)size);
List<int> TotalPage = new List<int>();
for (var i = 1; i <= res; i++)
{
TotalPage.Add(i);
}
IndexViewModel viewModel = new IndexViewModel
{
Customers = cusvm,
TotalPage = TotalPage
};
return Ok(viewModel);
}
создал аналогичный вью модели класс в тс:
import { Customer } from "./customer";
export class IndexViewModel {
constructor(
public customers: Customer[]=[],
public TotalPage: number[]=[], ) { }
}
и изменил компонент:
@Component({
templateUrl: './customer-list.component.html'
})
export class CustomerListComponent implements OnInit {
allcomp: IndexViewModel;
customersList: Customer[];
TotalPage: number[]=[];//Общее количество страниц
page: number = 1;//Первая страница
size: number = 5;//Количество строк на странице
order: string = '';
reverse: boolean = false;
constructor(private dataService: DataService) {}
ngOnInit() {
this.load();
}
load() {
this.dataService.getCustomers(this.page, this.size, this.order).subscribe((data: IndexViewModel) => this.customersList = data.customers);
this.dataService.getCustomers(this.page, this.size, this.order).subscribe((data: IndexViewModel) => this.TotalPage = data.TotalPage);
}
Что имею в итоге, все работает, клиенты передаются как положено, НО я не могу получить ТоталПейдж, что бы я не делал, список страниц не передается переменной ангуляра... если не сложно подскажите в чем моя ошибка? Пробовал делать:
this.dataService.getCustomers(this.page, this.size, this.order).subscribe((data: IndexViewModel) => this.allcomp= data);
и уже потом раздавать список клиентов и страниц, но тогда вообще не видит ничего(
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть дамп базы SQlite, мне нужно получить скрипт для создания такой же базы данных с полями и тд, для MySqlДамп я сделал, заменил в нем AUTOINCREMENT на AUTO_INCREMENT
Не знаю какую конструкцию mysql использоватьУ меня есть четыре таблицы:
Перенесли сайт на новый VDS серверПытаемся воспользоваться поиском, переходит на страницу поиска и пишет DB query error