2015-05-29 44 views
2

的属性值中的至少一项假设我有以下视图模型:流利的验证,确保清单已与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{ 

    } 
} 

我怎么能确保列表Documents中至少有一个DocIdentifier对象的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 
    } 
}