是否存在适用于多个属性总和的现有验证规则,其中总和不是 属性?

Is there an existing validation rule that works on the sum of several properties, where the sum is not a property?

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

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

并且存在一个 API 规则,其中 1 ≤ Sum(a, b, c, d) ≤ 10。

我试过像这样实施这条规则:

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

此规则无效。

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

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

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

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

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