首页 > 解决方案 > 是否存在适用于多个属性总和的现有验证规则,其中总和不是属性?

问题描述

假设我们有一个请求对象:

public class ExampleRequest {
    public int? A { get; set; }
    public int? B { get; set; }
    public int? C { get; set; }
    public int? D { get; set; }
    ...
}

并且存在 1 ≤ Sum(a, b, c, d) ≤ 10 的 API 规则。

我试过像这样实现这个规则:

RuleFor(x => x.A ?? 0 + x.B ?? 0 + x.C ?? 0 + x.D ?? 0)
    .GreaterThan(0)
    .LessThanOrEqualTo(10);

这条规则不起作用。

a) 我如何制定规则集来处理这种情况?

b)在这种情况下甚至可以创建规则——规则不一定应用于对象的属性,而是应用于多个属性的某些函数?

编辑:编辑代码块以表示错误的原因。

标签: c#.netapifluentvalidation

解决方案


您的错误是因为Operator priority+的优先级高于??。这应该有效:

RuleFor(x => (x.a ?? 0) + (x.b ?? 0) + (x.c ?? 0) + (x.d ?? 0) )
            .GreaterThan(0)
            .LessThanOrEqualTo(10);

推荐阅读