public IHttpActionResult Search(MailerSearchViewModel vm) { var page = vm.Page.GetValueOrDefault(0); var pageSize = vm.PageSize.GetValueOrDefault(10); var skipRows = (page - 1) * pageSize; var pred = PredicateBuilder.True <Mailer>(); pred = pred.And(p => p.Suppress == vm.Suppress); if (!string.IsNullOrWhiteSpace(vm.FirstName)) { pred = pred.And(p => p.FirstName.StartsWith(vm.FirstName)); } if (!string.IsNullOrWhiteSpace(vm.LastName)) { pred = pred.And(p => p.LastName.StartsWith(vm.LastName)); } if (!string.IsNullOrWhiteSpace(vm.FinderNumber)) { pred = pred.And(p => p.FinderNumber.StartsWith(vm.FinderNumber)); } if (!string.IsNullOrWhiteSpace(vm.SourceCode)) { pred = pred.And(p => p.SourceCode.StartsWith(vm.SourceCode)); } if (!string.IsNullOrWhiteSpace(vm.ZipCode)) { pred = pred.And(p => p.ZipCode.StartsWith(vm.ZipCode)); } if (!string.IsNullOrWhiteSpace(vm.State)) { pred = pred.And(p => p.State.StartsWith(vm.State)); } if (!string.IsNullOrWhiteSpace(vm.Address)) { pred = pred.And(p => p.Address.StartsWith(vm.Address)); } if (!string.IsNullOrWhiteSpace(vm.City)) { pred = pred.And(p => p.City.StartsWith(vm.City)); } if (vm.CampaignId != null) { pred = pred.And(p => p.CampaignId == vm.CampaignId); } if (vm.ReasonId != null) { pred = pred.And(p => p.ReasonId == vm.ReasonId); } var list = context.Mailers.AsQueryable() .Order(vm.OrderBy, vm.OrderDirection == "desc" ? SortDirection.Descending : SortDirection.Ascending) .ThenByDescending(m => m.CampaignId) .Include(r => r.Reason) .Where(pred) .Skip(skipRows) .Take(pageSize) .ProjectTo <MailerViewModel>(); var totalCount = context.Mailers.Count(); var filterCount = context.Mailers.Where(pred).Count(); var totalPages = (int)Math.Ceiling((decimal)filterCount / pageSize); vm.TotalCount = totalCount; vm.FilteredCount = filterCount; vm.TotalPages = totalPages; vm.Items = list.ToList(); return(Ok(vm)); }
public IHttpActionResult Export(MailerSearchViewModel vm) { var pred = PredicateBuilder.True <Mailer>(); pred = pred.And(p => p.Suppress == vm.Suppress); if (!string.IsNullOrWhiteSpace(vm.FirstName)) { pred = pred.And(p => p.FirstName.Contains(vm.FirstName)); } if (!string.IsNullOrWhiteSpace(vm.LastName)) { pred = pred.And(p => p.LastName.Contains(vm.LastName)); } if (!string.IsNullOrWhiteSpace(vm.FinderNumber)) { pred = pred.And(p => p.FinderNumber.StartsWith(vm.FinderNumber)); } if (!string.IsNullOrWhiteSpace(vm.SourceCode)) { pred = pred.And(p => p.SourceCode.StartsWith(vm.SourceCode)); } if (!string.IsNullOrWhiteSpace(vm.ZipCode)) { pred = pred.And(p => p.ZipCode.StartsWith(vm.ZipCode)); } if (!string.IsNullOrWhiteSpace(vm.State)) { pred = pred.And(p => p.State.StartsWith(vm.State)); } if (!string.IsNullOrWhiteSpace(vm.Address)) { pred = pred.And(p => p.Address.StartsWith(vm.Address)); } if (!string.IsNullOrWhiteSpace(vm.City)) { pred = pred.And(p => p.City.StartsWith(vm.City)); } if (vm.CampaignId != null) { pred = pred.And(p => p.CampaignId == vm.CampaignId); } if (vm.ReasonId != null) { pred = pred.And(p => p.ReasonId == vm.ReasonId); } var list = context.Mailers.AsQueryable() .Where(pred) .ProjectTo <MailerViewModel>(); var path = HttpContext.Current.Server.MapPath(@"~\app_data\mailerlist.csv"); using (var csv = new CsvWriter(new StreamWriter(File.Create(path)))) { csv.Configuration.RegisterClassMap <MailerMap>(); csv.WriteHeader <MailerViewModel>(); csv.WriteRecords(list); } var filename = $"mailer-list-{DateTime.Now.ToString("u")}.csv"; var response = new HttpResponseMessage(HttpStatusCode.OK); var stream = new FileStream(path, FileMode.Open, FileAccess.Read); response.Content = new StreamContent(stream); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = filename }; response.Content.Headers.Add("x-filename", filename); return(ResponseMessage(response)); }