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); }