public FileContentResult RequirementsByCategoryCSV(RequirementSearchViewModel vm) { Func <IQueryable <Requirement>, IQueryable <Requirement> > requirementFilter = q => { if (vm.SourceId.HasValue) { q = q.Where(r => r.SourceId == vm.SourceId.Value); } if (vm.CategoryId.HasValue) { q = q.Where(r => r.CategoryId == vm.CategoryId.Value); } if (vm.Status.HasValue) { q = q.Where(r => r.RequirementStatus == vm.Status.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.CreatedOn >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.CreatedOn <= vm.EndDate.Value); } return(q); }; var csv = new StringBuilder(); var requirementsByCategory = _requirementRepository.Search(requirementFilter).GroupBy(l => l.Category.Title) .Select(x => new { x.Key, Value = x.Count() }) .ToList(); var keys = string.Join(",", requirementsByCategory.Select(x => x.Key).ToArray()); csv.AppendLine(keys); var values = string.Join(",", requirementsByCategory.Select(x => x.Value).ToArray()); csv.AppendLine(values); return(File(new UTF8Encoding().GetBytes(csv.ToString()), "text/csv", "RequirementsByCategoryCSV.csv")); }
public ActionResult Download(RequirementSearchViewModel vm) { Func <IQueryable <Requirement>, IQueryable <Requirement> > requirementFilter = q => { q = q.Include(r => r.Category).Include(r => r.Source); if (vm.AssignedToUserId.HasValue) { q = q.Where(r => r.AssignedToUserId == vm.AssignedToUserId.Value); } if (vm.SourceId.HasValue) { q = q.Where(r => r.SourceId == vm.SourceId.Value); } if (vm.CategoryId.HasValue) { q = q.Where(r => r.CategoryId == vm.CategoryId.Value); } if (vm.Status.HasValue) { q = q.Where(r => r.RequirementStatus == vm.Status.Value); } if (!string.IsNullOrEmpty(vm.Title)) { q = q.Where(r => r.Title.Contains(vm.Title)); } if (vm.StartDate.HasValue) { q = q.Where(r => r.CreatedOn >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.CreatedOn <= vm.EndDate.Value); } q = q.OrderByDescending(c => c.CreatedOn); return(q); }; var requirements = _requirementRepository.Search(requirementFilter).ToList(); return(ExportAsCSV(requirements)); }