/// <summary> /// Gets Criminal result from database via filters /// </summary> /// <param name="name">Contains Name Filter, multiple values will be seperated with spaces (example : "Mike Halley Name1 Name2 etc...")</param> /// <param name="age">Age Range Filter</param> /// <param name="height">Height Range Filter</param> /// <param name="weight">Waight Range Filter</param> /// <param name="nationality">Contains Nationality Filter, multiple values will be seperated with spaces (example : "Mike Halley Name1 Name2 etc...")</param> /// <param name="sex">Sex Filter</param> /// <returns></returns> public static List <Criminal> GetFilteredResult( string name, DataRange <int> age, DataRange <decimal> height, DataRange <decimal> weight, string nationality, EmailSendRequest.SexType sex) { var dataContext = new CriminalsDataContext(); var myTable = dataContext.GetTable <Criminal>(); IQueryable <Criminal> result = myTable.Where(x => x.BirthDate.Year <= (DateTime.Now.Year - age.Minimum) && x.BirthDate.Year >= (DateTime.Now.Year - age.Maximum) && x.Height >= height.Minimum && x.Height <= height.Maximum && x.Weight >= weight.Minimum && x.Weight <= weight.Maximum ); if (!string.IsNullOrEmpty(name)) { var namePredicate = arrangeStringArrayPredicate(name, "Name"); result = result.Where(namePredicate); } if (!string.IsNullOrEmpty(nationality)) { var nationalityPredicate = arrangeStringArrayPredicate(nationality, "Nationality"); result = result.Where(nationalityPredicate); } if (sex != EmailSendRequest.SexType.All) { result = result.Where(x => x.Sex == (int)sex); } return(result.ToList()); }
static void ProcessSearch(string email, SearchInfoModel searchModel) { CriminalsDataContext dc = new CriminalsDataContext(); byte maleByte = (byte)CriminalInfo.SexType.Male; byte femaleByte = (byte)CriminalInfo.SexType.Female; var query = from a in dc.Criminals where (string.IsNullOrEmpty(searchModel.Name) || a.Name.Contains(searchModel.Name)) where (string.IsNullOrEmpty(searchModel.Nationality) || a.Nationality.Equals(searchModel.Nationality, StringComparison.OrdinalIgnoreCase)) where (searchModel.MinAge == null || a.Age >= searchModel.MinAge) where (searchModel.MaxAge == null || a.Age <= searchModel.MaxAge) where (searchModel.MinHeight == null || a.Height >= searchModel.MinHeight) where (searchModel.MaxHeight == null || a.Height <= searchModel.MaxHeight) where (searchModel.MinWeight == null || a.Weight >= searchModel.MinWeight) where (searchModel.MaxWeight == null || a.Weight <= searchModel.MaxWeight) where ((searchModel.CanBeMale && searchModel.CanBeFemale) || (searchModel.CanBeMale && a.Sex == maleByte) || (searchModel.CanBeFemale && a.Sex == femaleByte)) select a; var criminalsList = query.ToList(); var pdfNamesList = new List <string>(criminalsList.Count); foreach (var criminal in criminalsList) { CriminalInfo ci = new CriminalInfo(); ci.ID = criminal.Id; ci.Name = criminal.Name; ci.Age = criminal.Age; ci.Sex = (CriminalInfo.SexType)criminal.Sex; ci.Height = criminal.Height; ci.Weight = criminal.Weight; ci.Nationality = criminal.Nationality; ci.GeneratePDF(); pdfNamesList.Add(ci.GetPdfName()); } EmailUtils.SendPDFEmail(email, searchModel, pdfNamesList); }