2016-04-20 13 views
1

Wenn ich die folgende Regel haben:Wie füge ich mehrere IF-Bedingungen in einer Regel hinzu?

if (a == true && b == 0) 
    return errorsenum.somerror1; 
else if (b < c) 
    return errorsenum.somerror2; 

Wie kann ich die oben als FluentValidation Regel implementieren?

EDIT:

Würden diese 2 Regeln arbeiten?

RuleFor(x => x.b).GreaterThan(0).When(x => x.a); 
RuleFor(x => x.b).GreaterThanOrEqualTo(x => x.c); 
+0

Sie den Fehler kann der gesamte Code-Pfad einen Wert zurückgeben sollte; Könnten Sie bitte die Methode posten? –

+0

@ un-lucky Das Obige ist nur Pseudocode, wie die Regel entworfen wird. Ich brauche die Regel als FluentValidation-Regel. –

+0

Also das Problem ist, dass nur einer wahr sein muss, und dann verschiedene Validierungsfehler zurückgeben? – smoksnes

Antwort

2

Sie sind im Grunde genommen. Ich denke, das ist das, was Sie wollen:

RuleFor(x => x.b).GreaterThan(0).When(x => x.a).WithMessage("SomeError1"); 
RuleFor(x => x.b).GreaterThanOrEqualTo(x => x.c).When(x => !x.a).WithMessage("SomeError2"); 

Also nur die zweite Regel filtern, sodass es nur ausgeführt wird, wenn „a“ falsch ist und auch die benutzerdefinierte Nachricht an jede Regel hinzuzufügen.

Fluent Validierung läuft immer alle Ihre Regeln, auch wenn der erste fehlschlägt, so müssen Sie weiterhin When() verwenden, wenn Sie selektiv sein wollen.

Wenn Sie eine Reihe von Regeln, wenn ein == true zu überprüfen, können Sie dieses Muster verwenden Sie stattdessen:

When(x => x.a,() => 
{ 
    RuleFor(x => x.b).GreaterThan(0).WithMessage("SomeError1"); 
    RuleFor(x => x.c).LessThan(0).WithMessage("SomeError3"); 
}); 
Verwandte Themen