Ich habe Muss beherrschen diese fließend Gültigkeitsregel bekam:FluentValidation Muss von Wenn Krankheit betroffen Regel, dass ein anderer folgt
RuleForEach(tvm => tvm.Task.Executors).Cascade(CascadeMode.StopOnFirstFailure).Must((tvm, exec) => { return exec.Deadline.HasValue ? exec.Deadline.Value.Date >= DateTime.Now.Date : true; }).
When(tvm=>!tvm.Task.Instructed).
WithMessage("Deadline can't be earlier than today").
Must((tvm,exec)=>{ return exec.Deadline.HasValue ? exec.Deadline.Value.Date >= tvm.Task.InstructDate.Value.Date : true; }).
When(tvm=>tvm.Task.Instructed).
WithMessage("Deadline can't be earlier than the instructed date").
Must((tvm, exec) => { return exec.InstructionId == (int)Instructions.TakeOwnership ? exec.Deadline != null : true; }).
WithMessage("Enter deadline");
Wie Sie sehen können, gibt es 3 gibt es Regeln. Die ersten beiden sind an die Wann-Bedingung gebunden. Das Problem, das ich habe, ist die zweite Wenn Bedingung die erste Muss-Regel betrifft. Zum Beispiel, wenn tvm.Task.Instructed
falsch ist, und Deadline
eingegeben ist 2016-06-22
(und unter Berücksichtigung, dass das aktuelle Datum 2016.06.23 ist) würde ich erwarten, Deadline can't be earlier than today
Nachricht an receieve. Aber ich bekomme diese Nachricht nicht, weil die zweite When prüft, ob tvm.Task.Instructed
wahr ist und false zurückgibt. So scheint es, wenn sich die Bedingung nicht nur auf die Regel auswirkt. Ich würde diese Regeln wirklich fließend in einer Zeile schreiben wollen. Ist das möglich oder habe ich keine andere Wahl, als sie separat zu definieren?