public async Task <IActionResult> Index(string visitorGender, string searchString) { // Use LINQ to get list of genders. IQueryable <string> genderQuery = from v in _context.Visitor orderby v.Gender select v.Gender; var visitors = from v in _context.Visitor select v; if (!string.IsNullOrEmpty(searchString)) { visitors = visitors.Where(s => s.Nationality.Contains(searchString)); // Lambda Expression } if (!string.IsNullOrEmpty(visitorGender)) { visitors = visitors.Where(x => x.Gender == visitorGender); } //for gender search box var visitorGenderVm = new VisitorStatsViewModel(); visitorGenderVm.GendersList = new SelectList(await genderQuery.Distinct().ToListAsync()); visitorGenderVm.Visitors = await visitors.ToListAsync(); return(View(visitorGenderVm)); }
// GET: Visitors public async Task <IActionResult> Index(string visitorGender, string searchString) { // Use LINQ to get list of genders. IQueryable <string> genderQuery = from v in _context.Visitor orderby v.Gender select v.Gender; // Use LINQ to get list of Nationalities. IQueryable <string> nationalityQuery = from v in _context.Visitor orderby v.Nationality select v.Nationality; // Use LINQ to get list of Ages. IQueryable <int> AgeQuery = from v in _context.Visitor orderby v.Age_Group select v.Age_Group; // Use LINQ to get list of Dates. IQueryable <DateTime> DateQuery = from v in _context.Visitor orderby v.Date select v.Date; var visitors = from v in _context.Visitor select v; var visitorViewModel = new VisitorStatsViewModel(); visitorViewModel.Visitors = await visitors.ToListAsync(); //for gender search box visitorViewModel.GendersList = new SelectList(await genderQuery.Distinct().ToListAsync()); int sizeGender_list = visitorViewModel.GendersList.Count(); int[] myGenderInts = new int[sizeGender_list]; int index = 0; foreach (var g in visitorViewModel.GendersList) { int count = 0; foreach (var v in visitors) { //search for an option to replace this index for the index of g if (v.Gender == g.Text) { count++; myGenderInts[index] = count; } } index++; } //for Nationality visitorViewModel.NationalityList = new SelectList(await nationalityQuery.Distinct().ToListAsync()); int sizeNationality_list = visitorViewModel.NationalityList.Count(); int[] myNationalityInts = new int[sizeNationality_list]; index = 0; foreach (var nationality in visitorViewModel.NationalityList) { int count_nationality = 0; foreach (var v_nationality in visitors) { //search for an option to replace this index for the index of g if (v_nationality.Nationality == nationality.Text) { count_nationality++; myNationalityInts[index] = count_nationality; } } index++; } //for age search box visitorViewModel.AgeList = new SelectList(await AgeQuery.Distinct().ToListAsync()); int sizeAge_list = visitorViewModel.AgeList.Count(); int[] myAgeInts = new int[sizeAge_list]; index = 0; foreach (var age in visitorViewModel.AgeList) { int age_count = 0; foreach (var v_age in visitors) { //search for an option to replace this index for the index of g if (v_age.Age_Group == int.Parse(age.Text)) { age_count++; myAgeInts[index] = age_count; } } index++; } //for Date search visitorViewModel.DateList = new SelectList(await DateQuery.Distinct().ToListAsync()); int sizeDate_list = visitorViewModel.DateList.Count(); int[] myDateInts = new int[sizeDate_list]; index = 0; foreach (var date in visitorViewModel.DateList) { int date_count = 0; foreach (var v_date in visitors) { string visitordate = v_date.Date.ToString(); string dateslistitem = date.Text; //search for an option to replace this index for the index of g if (visitordate == dateslistitem) { date_count++; myDateInts[index] = date_count; } } index++; } //end of Date search if (!string.IsNullOrEmpty(searchString)) { visitors = visitors.Where(s => s.Nationality.Contains(searchString)); // Lambda Expression } if (!string.IsNullOrEmpty(visitorGender)) { visitors = visitors.Where(x => x.Gender == visitorGender); } //gender visitorViewModel.GenderInts = myGenderInts; visitorViewModel.MaleNum = myMaleNum; visitorViewModel.FemaleNum = myFemaleNum; //nationality visitorViewModel.NationalityInts = myNationalityInts; //Age visitorViewModel.AgeInts = myAgeInts; //date visitorViewModel.DateInts = myDateInts; ///////////////////////////////new chart.js for Date List <string> DataList_labels = new List <string>(); IList <double> DataList_values = new List <double>(); foreach (SelectListItem item in visitorViewModel.DateList) { DataList_labels.Add(item.Text); } foreach (Int32 item in visitorViewModel.DateInts) { double value = item; DataList_values.Add(value); } createNewChart(DataList_labels, DataList_values, "line", "Visits per Date", "DateChart"); ///////////////////////////////new chart.js for Nationality List <string> NationalityList_labels = new List <string>(); IList <double> NationalityList_values = new List <double>(); foreach (SelectListItem item in visitorViewModel.NationalityList) { NationalityList_labels.Add(item.Text); } foreach (Int32 item in visitorViewModel.NationalityInts) { double value = item; NationalityList_values.Add(value); } createNewChart(NationalityList_labels, NationalityList_values, "bar", "Visits per Nationality", "NationalityChart"); ///////////////////////////////new chart.js for Age List <string> AgeList_labels = new List <string>(); IList <double> AgeList_values = new List <double>(); foreach (SelectListItem item in visitorViewModel.AgeList) { AgeList_labels.Add(item.Text); } foreach (Int32 item in visitorViewModel.AgeInts) { double value = item; AgeList_values.Add(value); } createNewChart(AgeList_labels, AgeList_values, "line", "Visits per Age", "AgeChart"); ///////////////////////////////new chart.js for Gender List <string> GenderList_labels = new List <string>(); IList <double> GenderList_values = new List <double>(); foreach (SelectListItem item in visitorViewModel.GendersList) { GenderList_labels.Add(item.Text); } foreach (Int32 item in visitorViewModel.GenderInts) { double value = item; GenderList_values.Add(value); } createNewChart(GenderList_labels, GenderList_values, "pie", "Visits per Gender", "GenderChart"); /// end new chart.js return(View(visitorViewModel)); }