使用属性上的sum验证集合

Iva*_*ono 5 c# fluentvalidation

我有这两个实体:

public class Parent
{
    public ICollection<Child> Children {get; set;}
}

public class Child
{
    public decimal Percentage {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我想添加验证规则,以便Percentage所有子项的总数为100.如何在以下验证器中添加此规则?

public ParentValidator()
{
    RuleFor(x => x.Children).SetCollectionValidator(new ChildValidator());
}

private class ChildValidator : AbstractValidator<Child>
{
    public ChildValidator()
    {
        RuleFor(x => x.Percentage).GreaterThan(0));
    }
}
Run Code Online (Sandbox Code Playgroud)

Evg*_*vin 3

对集合属性使用谓词验证器:

public class ParentValidator : AbstractValidator<Parent> 
{
    public ParentValidator()
    {
        RuleFor(x => x.Children)
            .SetCollectionValidator(new ChildValidator())
            .Must(coll => coll.Sum(item => item.Percentage) == 100);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • SetCollectionValidator 现已弃用。请参阅[此](/sf/ask/3637790971/)获取解决方案。像这样的东西应该有效: `RuleFor(x =&gt; x.Items) .Must(coll =&gt; coll.Sum(item =&gt; item.Percentage) == 100) .When(x =&gt; x.Items != null) ;` (2认同)