2015-05-29 3 views
2

Предположим, у меня есть следующий ViewModel:Fluent Validation обеспечение список имеет, по меньшей мере, один элемент с значением свойства SomeValue

public class TaskViewModel{ 
    public MTask Task {get;set;} 
    public List<DocIdentifier> Documents {get;set;} 
    ..... 
} 

public class DocIdentifier{ 
    public string DocID {get;set;} 
    public bool Selected {get;set;} 
} 

И вот Fluent Validation валидатор я использую:

public class TaskValidator : AbstractValidator<TaskViewModel>{ 
    public TaskValidator{ 

    } 
} 

Как я могу убедитесь, что по крайней мере один объект DocIdentifier в списке Documents имеет свою ценность Selected значение True?

ответ

2

Вы должны использовать предикат валидатор Must, в котором можно задать пользовательские условия на основе LINQ расширений:

public class TaskValidator : AbstractValidator<TaskViewModel>{ 
    public TaskValidator() 
    { 
     RuleFor(task => task.Documents) 
      .Must(coll => coll.Any(item => item.Selected)) // you can secify custom condition in predicate validator 
      .WithMessagee("At least one of {0} documents should be selected", 
       (model, coll) => coll.Count); // error message can use validated collection as well as source model 
    } 
}