//Сохраняет заданные параметры для поиска компаниии private CompanySearchParameter FindSearchedCompany() { CompanySearchParameter searchedCompany = new CompanySearchParameter() { Name = nameTBox.Text, Category = (Category)Enum.Parse(typeof(Category), kindCBox.Text, true), Specialization = (Specialization)Enum.Parse(typeof(Specialization), specializationCBox.Text, true), Ownership = (OwnershipType)Enum.Parse(typeof(OwnershipType), ownershipCBox.Text, true), Contacts = new CompanyContactData() { Addres = new Addres() { City = citytextBox.Text, Street = streettextBox.Text, HouseNumber = (int)houseNumber.Value }, Telephone = phoneNumberTBox.Text } }; var schedule = new List <CompanySchedule>(); foreach (var el in workdaysGB.Controls) { CheckBox day = (CheckBox)el; if (day.Checked) { schedule.Add(new CompanySchedule() { Day = (Days)Enum.Parse(typeof(Days), day.Text, true), StartWorkingTime = startDTPicker.Value, EndWorkingTime = endDTPicker.Value }); } } searchedCompany.Schedules = schedule; var serv = new List <string>(); foreach (var ch in servicesChLB.CheckedItems) { serv.Add(ch.ToString()); } searchedCompany.Services = serv; return(searchedCompany); }
//Поиск предприятий по нажатию на кнопку "Поиск" private void Findbtn_Click(object sender, EventArgs e) { if (!CheckTelephone()) { MessageBox.Show("Некорректно введен номер телефона.", "Некорректные данные", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { CompanySearchParameter searchedCompany = FindSearchedCompany(); var collection = CompanyCollection.Search(searchedCompany); bindListToDataGridView(collection); foundCompanies = collection; if (collection.Count == 0) { MessageBox.Show("Предприятий по заданным параметрам не найдено.", "Поиск", MessageBoxButtons.OK); return; } } }
/// <summary> /// Нахождение компаний по заданым критериям /// </summary> /// <param name="company"></param> public static BindingList <Company> Search(CompanySearchParameter parameters) { IEnumerable <Company> companiesCopy = MakeCompaniesCopy(); //if (!string.IsNullOrEmpty(parameters.Name)) //{ // companiesCopy = companiesCopy.Where(c => string.Equals(c.Name, parameters.Name, StringComparison.CurrentCultureIgnoreCase)); //} if (!string.IsNullOrEmpty(parameters.Name)) { companiesCopy = companiesCopy.Where(c => c.Name.ToLower().Contains(parameters.Name.ToLower())); } if (parameters.Category != Category.любой) { companiesCopy = companiesCopy.Where(c => c.Category == parameters.Category); } if (parameters.Services != null && parameters.Services.Any()) { companiesCopy = companiesCopy .Where(c => c.Services.Select(s => s.ToLower()) .Intersect(parameters.Services.Select(s => s.ToLower())).Count() >= parameters.Services.Count); } if (parameters.Specialization != Specialization.любая) { companiesCopy = companiesCopy.Where(c => c.Specialization == parameters.Specialization); } if (parameters.Ownership != OwnershipType.любая) { companiesCopy = companiesCopy.Where(c => c.Ownership == parameters.Ownership); } if (parameters.Schedules != null && parameters.Schedules.Any()) { parameters.Schedules.ForEach(s => { companiesCopy = companiesCopy.Where(c => c.Schedules.FirstOrDefault(sc => sc.Day == s.Day)?.StartWorkingTime.ToString().Substring(11, 5) == "00:00" || c.Schedules.FirstOrDefault(sc => sc.Day == s.Day)?.StartWorkingTime.TimeOfDay <= s.StartWorkingTime.TimeOfDay); companiesCopy = companiesCopy.Where(c => c.Schedules.FirstOrDefault(sc => sc.Day == s.Day)?.EndWorkingTime.ToString().Substring(11, 5) == "23:59" || c.Schedules.FirstOrDefault(sc => sc.Day == s.Day)?.EndWorkingTime.TimeOfDay >= s.EndWorkingTime.TimeOfDay); }); } //if(parameters.Contacts != null && !string.IsNullOrEmpty(parameters.Contacts.Addres.City)) //{ // companiesCopy = companiesCopy.Where(c => c.Contacts.Addres.City == parameters.Contacts.Addres.City); //} if (parameters.Contacts != null && !string.IsNullOrEmpty(parameters.Contacts.Addres.City)) { companiesCopy = companiesCopy.Where(c => c.Contacts.Addres.City.ToLower(). Contains(parameters.Contacts.Addres.City.ToLower())); } //if (parameters.Contacts != null && !string.IsNullOrEmpty(parameters.Contacts.Addres.Street)) //{ // companiesCopy = companiesCopy.Where(c => c.Contacts.Addres.Street == parameters.Contacts.Addres.Street); //} if (parameters.Contacts != null && !string.IsNullOrEmpty(parameters.Contacts.Addres.Street)) { companiesCopy = companiesCopy.Where(c => c.Contacts.Addres.Street.ToLower(). Contains(parameters.Contacts.Addres.Street.ToLower())); } if (parameters.Contacts != null && parameters.Contacts.Addres.HouseNumber != 0) { companiesCopy = companiesCopy.Where(c => c.Contacts.Addres.HouseNumber == parameters.Contacts.Addres.HouseNumber); } if (parameters.Contacts != null && !string.IsNullOrEmpty(parameters.Contacts.Telephone)) { companiesCopy = companiesCopy.Where(c => c.Contacts.Telephone == parameters.Contacts.Telephone); } BindingList <Company> result = new BindingList <Company>(); companiesCopy.ToList().ForEach(c => result.Add(c)); return(result); }