FluentValidation 和对象集合其属性应该是唯一的

Ner*_*erf 5 c# fluentvalidation

我有课:

Sponsored { int Order };
Run Code Online (Sandbox Code Playgroud)

我收集了它:

IEnumerable<Sponsored> sponsored; 
Run Code Online (Sandbox Code Playgroud)

我想检查Order这个集合是否是唯一的。

我可以通过 做吗FluentValidation

我有:

SponsoredValidator : AbstractValidator<IEnumerable<Sponsored>>
Run Code Online (Sandbox Code Playgroud)

SponsoredValidator : AbstractValidator<Sponsored>
Run Code Online (Sandbox Code Playgroud)

@Edit:它应该通过 ValidationAttribute 与 WebAPI POST 方法连接

[Validator(typeof(SponsoredValidator))]
Run Code Online (Sandbox Code Playgroud)

Gyö*_*zeg 9

public class SponsoredCollectionValidator : AbstractValidator<IEnumerable<Sponsored>>
{
    private class SponsoredComparer : IEqualityComparer<Sponsored>
    {
        public bool Equals(Sponsored x, Sponsored y) => x?.Order == y?.Order;
        public int GetHashCode(Sponsored obj) => obj.Order;
    }

    public SponsoredCollectionValidator()
    {
       RuleFor(coll => coll)
           .Must(coll => coll.Distinct(new SponsoredComparer()).Count() == coll.Count())
           .WithMessage("Elements are not unique.");
    }
}
Run Code Online (Sandbox Code Playgroud)