public ListViewModel <ItemViewModel> GetItems(ItemQueryViewModel viewModel) { viewModel.PageNumber = viewModel.PageNumber ?? 1; viewModel.PageSize = viewModel.PageSize ?? 30; var query = Repository.GetAll(); Expression <Func <Item, ItemViewModel> > proj = x => new ItemViewModel { ItemId = x.ItemId, ItemName = x.ItemName, ItemNumber = x.ItemNumber, ItemType = x.ItemType, UserId = x.UserId }; if (viewModel.ItemId.HasValue) { var result = query.Where(x => x.ItemId == viewModel.ItemId).Select(proj).FirstOrDefault(); if (result == null) { throw new NotFoundException("No such item"); } return(new ListViewModel <ItemViewModel>(new List <ItemViewModel> { result }, 1, 1)); } if (!string.IsNullOrWhiteSpace(viewModel.Name)) { query = query.Where(x => x.ItemName.Contains(viewModel.Name)); } if (!string.IsNullOrWhiteSpace(viewModel.Type)) { query = query.Where(x => x.ItemType == viewModel.Type); } if (viewModel.NumberMin.HasValue) { query = query.Where(x => x.ItemNumber >= viewModel.NumberMin); } if (viewModel.NumberMax.HasValue) { query = query.Where(x => x.ItemNumber < viewModel.NumberMax); } var count = query.Count(); query = query.OrderBy(x => x.ItemName); if (viewModel.PageNumber.Value > 1) { query = query.Skip((viewModel.PageNumber.Value - 1) * viewModel.PageSize.Value); } query = query.Take(viewModel.PageSize.Value); var materialized = query.Select(proj).ToList(); var totalPages = (int)Math.Ceiling((double)count / viewModel.PageSize.Value); return(new ListViewModel <ItemViewModel>(materialized, viewModel.PageNumber.Value, totalPages)); }
private async void Query(string obj) { ItemQueryViewModel viewModel = new ItemQueryViewModel(new SingleChecklist()); await Navigation.PushAsync(new ItemQueryPage() { BindingContext = viewModel }); }
public ActionResult <ListViewModel <ItemViewModel> > GetItems([FromQuery] ItemQueryViewModel viewModel) { if (!viewModel.PageSize.HasValue || viewModel.PageSize.Value > 200) { viewModel.PageSize = 200; } else if (viewModel.PageSize.Value <= 0) { viewModel.PageSize = 30; } var result = Service.GetItems(viewModel); return(new ActionResult <ListViewModel <ItemViewModel> >(result)); }