private bool CheckTimings() { Timings.ForEach((p) => { p.equipmentId = p.equipmentId.Trim(); p.materialId = p.materialId.Trim(); p.timing = p.timing.Trim(); }); //проверим, что для каждой записи по таймингу существует //указанная номенклатура и указанное оборудование //не должно быть номенклатуры, которую никто не умеет обрабатывать //а также что сам тайминг приводится к числу (хотя бы double) //и строго больше нуля Dictionary <string, bool> existingNomenclature = new Dictionary <string, bool>(); foreach (var item in Nomenclature) { existingNomenclature.Add(item.id, false); } List <string> existingEquipmentId = Equipment.ConvertAll <string>(p => p.id); bool validatedOk = true; foreach (var item in Timings) { double timing; if (!double.TryParse(item.timing, out timing)) { ValidationResults.Add(new ValidationResult(string.Format("Time is not a number: {0}", item.ToString()))); validatedOk = false; } if (timing <= 0) { ValidationResults.Add(new ValidationResult(string.Format("Time should be positive: {0}", item.ToString()))); validatedOk = false; } if (!existingEquipmentId.Contains(item.equipmentId)) { ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no equipment with id='{0}' in {1}", item.equipmentId, item.ToString()))); validatedOk = false; } if (!existingNomenclature.ContainsKey(item.materialId)) { ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no nomenclature with id='{0}' in {1}", item.materialId, item.ToString()))); validatedOk = false; } else { existingNomenclature[item.materialId] = true; } } //вдруг никто не умеет обрабатывать какой-то тип руды foreach (var pair in existingNomenclature) { if (!pair.Value) { ValidationResults.Add(new ValidationResult(string.Format("Foreign key violation: no equipment can treat nomenclature id='{0}' ", pair.Key))); validatedOk = false; } } //проверим, что тайминг уникалин для пары оборудование + тип руды if (!CheckUnique <TimingDTO>(Timings, (p) => string.Format("{0}:{1}", p.equipmentId, p.materialId), "machine_tool_id + nomenclature_id")) { validatedOk = false; } ; return(validatedOk); }