public override ValuesValidationResult Validate(IEnumerable <object> values, IField field) { if (field.IsValueRequired && (values == null || values.Count() == 0)) { return(CreateResultForEmptyValue(field)); } var sourceValues = field.data; var unknownValues = values.Where(x => sourceValues.Where(y => y.IdFieldValue == (int)x).Count() == 0); var valuesPrepared = new HashSet <int>(); var valuesInvalid = new System.Collections.ObjectModel.Collection <string>(); foreach (var value in values) { if (value is int) { valuesPrepared.Add((int)value); } else if (value is File) { valuesPrepared.Add((value as File).IdFile); } else { valuesInvalid.Add(value?.ToString()?.Truncate(0, 10, "...")); } } var filesFound = DataAccessManager.Get <File>().Where(x => valuesPrepared.Contains(x.IdFile)).Select(x => x.IdFile).ToList(); if (field.IsValueRequired && filesFound.Count == 0) { return(CreateResultForEmptyValue(field)); } var filesUnknown = valuesPrepared.Where(x => !filesFound.Contains(x)).ToList(); if (filesUnknown.Count > 0 || valuesInvalid.Count > 0) { var errors = new List <string>(); if (valuesInvalid.Count > 0) { errors.Add("Следующие значения некорректны:\r\n - " + string.Join(";\r\n - ", valuesInvalid) + "."); } if (filesUnknown.Count > 0) { errors.Add("Следующие файлы не найдены: №" + string.Join(", №", filesUnknown) + "."); } return(new ValuesValidationResult(string.Join("\r\n", errors))); } return(new ValuesValidationResult(filesFound.Select(x => (object)x))); }