Я стараюсь, чтобы список имел уникальные SSN. Я получаю «Имя свойства не может быть автоматически определено для элемента element => element. Укажите либо имя настраиваемого свойства, вызвав ошибку« WithName ». Знаем ли мы, что я здесь делаю неправильно?Проверьте свойства, уникальные в списке в FluentValidation
using FluentValidation;
using FluentValidation.Validators;
public class PersonsValidator : AbstractValidator<Persons>
{
public PersonsValidator()
{
this.RuleFor(element => element)
.SetValidator(new SSNNumbersInHouseHoldShouldBeUnique<Persons>())
.WithName("SSN");
.WithMessage("SSN's in household should be unique");
}
}
public class SSNNumbersInHouseHoldShouldBeUnique<T> : PropertyValidator
{
public SSNNumbersInHouseHoldShouldBeUnique()
: base("SSN's in household should be unique")
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
var persons = context.Instance as Persons;
try
{
if (persons == null)
{
return false;
}
var persons = persons.Where(element => element.SSN.Trim().Length > 0);
var allSSNs = persons.Select(element => element.SSN.Trim());
if (allSSNs.Count() > allSSNs.Distinct().Count())
{
return false;
}
return true;
}
catch (Exception ex)
{
return false;
}
}
}
public class Persons : List<Person>
{}
public class Person
{
public string SSN{ get; set; }
}
Не должно быть элемент 'element = >.SSN'? Или сохраните элемент element => и используйте '.WithName (" SSN ")', как он предлагает – Rob
Спасибо, Роб. Нет такого элемента => element.SSN. Использование .WithName ("SSN") также вызывает такую же ошибку. Кажется, я делаю что-то принципиально неправильное. Я отредактировал этот вопрос выше. –