public async Task <object> Get([FromUri] MailerSearchModel pager = null) { try { Stopwatch stopwatch = new Stopwatch(); stopwatch.Restart(); if (pager == null) { pager = new MailerSearchModel(); } var query = _context.Mailers; var totalCount = await query.CountAsync(); var pred = PredicateBuilder.True <Mailer>(); if (!string.IsNullOrWhiteSpace(pager.FirstName)) { pred = pred.And(p => p.FirstName.StartsWith(pager.FirstName)); } if (!string.IsNullOrWhiteSpace(pager.LastName)) { pred = pred.And(p => p.LastName.StartsWith(pager.LastName)); } if (!string.IsNullOrWhiteSpace(pager.Address)) { pred = pred.And(p => p.Address.Contains(pager.Address)); } if (!string.IsNullOrWhiteSpace(pager.City)) { pred = pred.And(p => p.City.Contains(pager.City)); } if (!string.IsNullOrWhiteSpace(pager.State)) { pred = pred.And(p => p.State.Equals(pager.State)); } if (!string.IsNullOrWhiteSpace(pager.ZipCode)) { pred = pred.And(p => p.ZipCode.StartsWith(pager.ZipCode)); } if (!string.IsNullOrWhiteSpace(pager.SourceCode)) { pred = pred.And(p => p.SourceCode.Equals(pager.SourceCode)); } if (!string.IsNullOrWhiteSpace(pager.FinderNumber)) { pred = pred.And(p => p.FinderNumber.Equals(pager.FinderNumber)); } if (pager.CampaignId != null) { pred = pred.And(p => p.CampaignId == pager.CampaignId); } if (pager.ReasonId != null) { pred = pred.And(p => p.ReasonId == pager.ReasonId); } pred = pred.And(p => p.Suppress == pager.Suppress); var filteredQuery = query.Where(pred); var pagerCount = filteredQuery.Count(); var totalPages = Math.Ceiling((double)pagerCount / pager.PageSize ?? PAGE_SIZE); var results = await filteredQuery.Where(pred) .Order(pager.OrderBy, pager.OrderDirection == "desc" ? SortDirection.Descending : SortDirection.Ascending) .Order("Id", SortDirection.Descending) .Skip(pager.PageSize * (pager.Page - 1) ?? 0) .Take(pager.PageSize ?? PAGE_SIZE) .ProjectTo <MailerViewModel>().ToListAsync(); pager.TotalCount = totalCount; pager.FilteredCount = pagerCount; pager.TotalPages = totalPages; pager.Results = results; stopwatch.Stop(); pager.ElapsedTime = stopwatch.Elapsed; return(Ok(pager)); } catch (Exception ex) { return(BadRequest(ex.InnerException.Message)); } }
public async Task <IHttpActionResult> Export(MailerSearchModel pager) { try { var pred = PredicateBuilder.True <Mailer>(); if (!string.IsNullOrWhiteSpace(pager.FirstName)) { pred = pred.And(p => p.FirstName.StartsWith(pager.FirstName)); } if (!string.IsNullOrWhiteSpace(pager.LastName)) { pred = pred.And(p => p.LastName.StartsWith(pager.LastName)); } if (!string.IsNullOrWhiteSpace(pager.Address)) { pred = pred.And(p => p.Address.Contains(pager.Address)); } if (!string.IsNullOrWhiteSpace(pager.City)) { pred = pred.And(p => p.City.Contains(pager.City)); } if (!string.IsNullOrWhiteSpace(pager.State)) { pred = pred.And(p => p.State.Contains(pager.State)); } if (!string.IsNullOrWhiteSpace(pager.ZipCode)) { pred = pred.And(p => p.ZipCode.Contains(pager.ZipCode)); } if (!string.IsNullOrWhiteSpace(pager.SourceCode)) { pred = pred.And(p => p.SourceCode.Contains(pager.SourceCode)); } if (!string.IsNullOrWhiteSpace(pager.FinderNumber)) { pred = pred.And(p => p.FinderNumber.Contains(pager.FinderNumber)); } if (pager.CampaignId != null) { pred = pred.And(p => p.CampaignId == pager.CampaignId); } if (pager.ReasonId != null) { pred = pred.And(p => p.ReasonId == pager.ReasonId); } pred = pred.And(p => p.Suppress == pager.Suppress); var list = await _context.Mailers.AsQueryable() .Where(pred) .ProjectTo <MailerViewModel>().ToListAsync(); 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)); } catch (Exception e) { return(BadRequest(e.InnerException.Message)); } }