public ActionResult Search(SearchFormViewModel obj) { var ageFilteredValues = GetAgeFilteredValuesByExpression(obj.AgeExpression, obj.Age); var housesByPrecinct = obj.PrecinctId.HasValue ? GetHousesByPrecinctId(obj.PrecinctId.Value) : new List<int>(); var voterPartyRelations = dataManager.VoterPartyRelations.GetAll().Where(x => x.PartyId == obj.PartyId); var result = from v in dataManager.Voters.GetAll().Select(x => new VoterViewModel { Voter = x, Person = dataManager.Persons.Get(x.PersonId ?? 0) }) where (v.Person.LastName ?? "").ToLowerInvariant().StartsWith((obj.LastName ?? "").ToLowerInvariant()) && (v.Person.FirstName ?? "").ToLowerInvariant().StartsWith((obj.FirstName ?? "").ToLowerInvariant()) && (v.Person.MiddleName ?? "").ToLowerInvariant().StartsWith((obj.MiddleName ?? "").ToLowerInvariant()) && (obj.GaveBiometricData == SearchFormViewModel.GaveBiometricDataType.yes ? v.Voter.GaveBiometricData : (obj.GaveBiometricData == SearchFormViewModel.GaveBiometricDataType.no ? !v.Voter.GaveBiometricData : true)) //filtering by living address && (obj.DistrictId.HasValue ? v.Person.DistrictId == obj.DistrictId : true) && (obj.LocalityId.HasValue ? obj.LocalityId.Value == v.Person.LocalityId : true) && (obj.StreetId.HasValue ? obj.StreetId.Value == v.Person.StreetId : true) && (obj.HouseId.HasValue ? obj.HouseId.Value == v.Person.HouseId : true) //filtering by party && (obj.PartyId.HasValue ? voterPartyRelations.Select(x => x.VoterId).Contains(v.Voter != null ? v.Voter.Id : 0) : true) //filtering by age && (obj.Age.HasValue ? (ageFilteredValues.Contains(v.Person.Years ?? 0)) : true) //filtering by precinct point in house && (obj.PrecinctId.HasValue ? (housesByPrecinct.Contains(v.Person.HouseId ?? 0)) : true) select v; var districts = new List<SelectListItem> { new SelectListItem() }; districts.AddRange(from d in dataManager.Districts.GetAll() select new SelectListItem { Text = d.Name, Value = d.Id.ToString() }); ViewBag.Districts = districts; ViewBag.Locality = dataManager.Localities.Get(obj.LocalityId ?? 0); ViewBag.Street = dataManager.Streets.Get(obj.StreetId ?? 0); ViewBag.House = dataManager.Houses.Get(obj.HouseId ?? 0); var parties = new List<SelectListItem> { new SelectListItem() }; parties.AddRange(from p in dataManager.Parties.GetAll() select new SelectListItem { Text = p.Name, Value = p.Id.ToString() }); ViewBag.Parties = parties; var precincts = new List<SelectListItem> { new SelectListItem() }; precincts.AddRange(from p in dataManager.Precincts.GetAll().OrderBy(x => x.Name) select new SelectListItem { Text = p.Name, Value = p.Id.ToString() }); ViewBag.Precincts = precincts; obj.SearchResult = result.ToList(); return View(obj); }
private IEnumerable<int> GetAgeFilteredValuesByExpression(SearchFormViewModel.AgeExpressionType aExpType, int? age) { var ageList = new List<int>(); for(int i = 1; i <= 150; i++) { ageList.Add(i); } if (aExpType == SearchFormViewModel.AgeExpressionType.Equal) return ageList.Where(a => a == age); if (aExpType == SearchFormViewModel.AgeExpressionType.GreatEqual) return ageList.Where(a => a >= age); if (aExpType == SearchFormViewModel.AgeExpressionType.GreatThen) return ageList.Where(a => a > age); if (aExpType == SearchFormViewModel.AgeExpressionType.LessEqual) return ageList.Where(a => a <= age); if (aExpType == SearchFormViewModel.AgeExpressionType.LessThen) return ageList.Where(a => a < age); return ageList; }