private void btnQuery_Click(object sender, EventArgs e) { if (dgvQueries.Rows.Count == 0) { Control.Exclamation("Список запросов пуст.", "Запросы"); return; } reportIsReady = true; int row = 0; switch (cbEntities.Text) { case "Объекты": Control.tempObjectResult = Control.container.Objects.ToList(); do { // Значения в таблице запросов int intValue; string stringValue; DateTime dateValue; switch (dgvQueries.Rows[row].Cells[1].Value.ToString()) // Атрибут в таблице запросов { case "ID": intValue = int.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Id == intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Id == intValue)).ToList(); break; case "Не равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Id != intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Id != intValue)).ToList(); break; case "Больше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Id > intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Id > intValue)).ToList(); break; case "Меньше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Id < intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Id < intValue)).ToList(); break; } break; case "Название": stringValue = dgvQueries.Rows[row].Cells[3].Value.ToString(); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Name == stringValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Name == stringValue)).ToList(); break; case "Не равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Name != stringValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Name != stringValue)).ToList(); break; case "Больше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => string.Compare(x.Name, stringValue) > 0).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => string.Compare(x.Name, stringValue) > 0)).ToList(); break; case "Меньше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => string.Compare(x.Name, stringValue) < 0).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => string.Compare(x.Name, stringValue) < 0)).ToList(); break; } break; case "Описание": stringValue = dgvQueries.Rows[row].Cells[3].Value.ToString(); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Description == stringValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Description == stringValue)).ToList(); break; case "Не равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.Description != stringValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.Description != stringValue)).ToList(); break; case "Больше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => string.Compare(x.Description, stringValue) > 0).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => string.Compare(x.Description, stringValue) > 0)).ToList(); break; case "Меньше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => string.Compare(x.Description, stringValue) < 0).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => string.Compare(x.Description, stringValue) < 0)).ToList(); break; } break; case "Средняя оценка": intValue = int.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.AvarageMark == (double)intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.AvarageMark == (double)intValue)).ToList(); break; case "Не равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.AvarageMark != (double)intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.AvarageMark != (double)intValue)).ToList(); break; case "Больше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.AvarageMark > (double)intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.AvarageMark > (double)intValue)).ToList(); break; case "Меньше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.AvarageMark < (double)intValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.AvarageMark < (double)intValue)).ToList(); break; } break; case "Дата создания": dateValue = DateTime.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()).Date; switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.CreatingDate == dateValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.CreatingDate == dateValue)).ToList(); break; case "Не равно": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.CreatingDate != dateValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.CreatingDate != dateValue)).ToList(); break; case "Больше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.CreatingDate > dateValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.CreatingDate > dateValue)).ToList(); break; case "Меньше": Control.tempObjectResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempObjectResult.Where(x => x.CreatingDate < dateValue).ToList() : Control.tempObjectResult.Union(Control.container.Objects.Where(x => x.CreatingDate < dateValue)).ToList(); break; } break; } } while (dgvQueries.Rows.Count != ++row); if (Control.tempObjectResult.Count != 0) { CompleteForm.dgvObjectResults(this); } else { dgvResult.DataSource = null; Control.Exclamation("По заданному запросу не найдено ни одного объекта.", "Запрос объекта"); } break; // case "Объекты": case "Коллекции": Control.tempCollectionResult = Control.container.Collections.ToList(); do { // Значения в таблице запросов int intValue; string stringValue; DateTime dateValue; switch (dgvQueries.Rows[row].Cells[1].Value.ToString()) // Атрибут в таблице запросов { case "ID": intValue = int.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Id == intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Id == intValue)).ToList(); break; case "Не равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Id != intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Id != intValue)).ToList(); break; case "Больше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Id > intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Id > intValue)).ToList(); break; case "Меньше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Id < intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Id < intValue)).ToList(); break; } break; case "Название": stringValue = dgvQueries.Rows[row].Cells[3].Value.ToString(); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Name == stringValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Name == stringValue)).ToList(); break; case "Не равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Name != stringValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Name != stringValue)).ToList(); break; case "Больше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => string.Compare(x.Name, stringValue) > 0).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => string.Compare(x.Name, stringValue) > 0)).ToList(); break; case "Меньше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => string.Compare(x.Name, stringValue) < 0).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => string.Compare(x.Name, stringValue) < 0)).ToList(); break; } break; case "Описание": stringValue = dgvQueries.Rows[row].Cells[3].Value.ToString(); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Description == stringValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Description == stringValue)).ToList(); break; case "Не равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.Description != stringValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.Description != stringValue)).ToList(); break; case "Больше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => string.Compare(x.Description, stringValue) > 0).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => string.Compare(x.Description, stringValue) > 0)).ToList(); break; case "Меньше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => string.Compare(x.Description, stringValue) < 0).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => string.Compare(x.Description, stringValue) < 0)).ToList(); break; } break; case "Средняя оценка": intValue = int.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()); MessageBox.Show("средняя оценка = " + intValue); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.AverageMark == (double)intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.AverageMark == (double)intValue)).ToList(); break; case "Не равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.AverageMark != (double)intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.AverageMark != (double)intValue)).ToList(); break; case "Больше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.AverageMark > (double)intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.AverageMark > (double)intValue)).ToList(); break; case "Меньше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.AverageMark < (double)intValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.AverageMark < (double)intValue)).ToList(); break; } break; case "Дата создания": dateValue = DateTime.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()).Date; switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.CreatingDate == dateValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.CreatingDate == dateValue)).ToList(); break; case "Не равно": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.CreatingDate != dateValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.CreatingDate != dateValue)).ToList(); break; case "Больше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.CreatingDate > dateValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.CreatingDate > dateValue)).ToList(); break; case "Меньше": Control.tempCollectionResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempCollectionResult.Where(x => x.CreatingDate < dateValue).ToList() : Control.tempCollectionResult.Union(Control.container.Collections.Where(x => x.CreatingDate < dateValue)).ToList(); break; } break; } } while (dgvQueries.Rows.Count != ++row); if (Control.tempCollectionResult.Count != 0) { CompleteForm.dgvCollectionResults(this); } else { dgvResult.DataSource = null; Control.Exclamation("По заданному запросу не найдено ни одной коллекции.", "Запрос коллекции"); } break; // case "Коллекции": case "Пользователи": Control.tempUserResult = Control.container.Users.ToList(); do { // Значения в таблице запросов int intValue; string stringValue; switch (dgvQueries.Rows[row].Cells[1].Value.ToString()) // Атрибут в таблице запросов { case "ID": intValue = int.Parse(dgvQueries.Rows[row].Cells[3].Value.ToString()); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Id == intValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Id == intValue)).ToList(); break; case "Не равно": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Id != intValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Id != intValue)).ToList(); break; case "Больше": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Id > intValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Id > intValue)).ToList(); break; case "Меньше": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Id < intValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Id < intValue)).ToList(); break; } break; case "Имя пользователя": stringValue = dgvQueries.Rows[row].Cells[3].Value.ToString(); switch (dgvQueries.Rows[row].Cells[2].Value.ToString()) { case "Равно": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Name == stringValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Name == stringValue)).ToList(); break; case "Не равно": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => x.Name != stringValue).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => x.Name != stringValue)).ToList(); break; case "Больше": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => string.Compare(x.Name, stringValue) > 0).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => string.Compare(x.Name, stringValue) > 0)).ToList(); break; case "Меньше": Control.tempUserResult = (row == 0 || dgvQueries.Rows[row].Cells[4].Value.ToString() == "And") ? Control.tempUserResult.Where(x => string.Compare(x.Name, stringValue) < 0).ToList() : Control.tempUserResult.Union(Control.container.Users.Where(x => string.Compare(x.Name, stringValue) < 0)).ToList(); break; } break; } } while (dgvQueries.Rows.Count != ++row); if (Control.tempUserResult.Count != 0) { CompleteForm.dgvUserResult(this); } else { dgvResult.DataSource = null; Control.Exclamation("По заданному запросу не найдено ни одного пользователя.", "Запрос пользователя"); } break; // case "Пользователи": default: break; } }