Вы можете использовать операторы When
и Unless
, чтобы включать или исключать элементы из проверки:
RuleFor(x => x.Categories)
.Must((x, cat) => cat.SelectedOption != 0)
.When(x => x.Categories.Any(y => y.CategoryId == 123))
.WithMessage("{0}", (x, cat) => cat.ValidationMessage);
РЕДАКТИРОВАТЬ: на основе недавно выявленного требования.
Проверка значения SelectedOption должна выполняться только в той категории, где идентификатор равен 123
Мое предложение: создайте для этого отдельный валидатор.
public class CategoryValidator : AbstractValidator<Category>
{
public CategoryValidator()
{
RuleFor(category => category)
.Must(cat => cat.SelectedOption != 0)
.When(cat => cat.CategoryId == 123);
}
}
И зарегистрируйте этот валидатор для каждой категории.
RuleForEach(x => x.Categories)
.SetValidator(new CategoryValidator());
РЕДАКТИРОВАТЬ 2: Поддержка нескольких категорий
public class CategoryValidator : AbstractValidator<Category>
{
public static readonly ImmutableArray<int> specialCategories
= ImmutableArray.Create(123, 456, 789);
public CategoryValidator()
{
RuleFor(category => category)
.Must(cat => cat.SelectedOption != 0)
.When(cat => specialCategories.Contains(cat.CategoryId))
.WithMessage(cat => cat.ErrorMessage);
}
}