Transforming Values¶
As of FluentValidation 9.5, you can apply a transformation to a property value prior to validation being performed against it. For example, if you have property of type string
that actually contains numeric input, you could apply a transformation to convert the string value to a number.
Transform(from: x => x.SomeStringProperty, to: value => int.TryParse(value, out int val) ? (int?) val : null)
.GreaterThan(10);
This rule transforms the value from a string
to an nullable int
(returning null
if the value couldn’t be converted). A greater-than check is then performed on the resulting value.
Syntactically this is not particularly nice to read, so the logic for the transformation can optionally be moved into a separate method:
Transform(x => x.SomeStringProperty, StringToNullableInt)
.GreaterThan(10);
int? StringToNullableInt(string value)
=> int.TryParse(value, out int val) ? (int?) val : null;
This syntax is available in FluentValidation 9.5 and newer.
There is also a TransformForEach
method available, which performs the transformation against each item in a collection.
Transforming Values (9.0 - 9.4)¶
Prior to FluentValidation 9.5, you can use the Transform
method after a call to RuleFor
to achieve the same result.
RuleFor(x => x.SomeStringProperty)
.Transform(value => int.TryParse(value, out int val) ? (int?) val : null)
.GreaterThan(10);
This Transform
method is marked as obsolete as of FluentValidation 9.5 and is removed in FluentValidation 10.0. In newer versions of FluentValidation the transformation should be applied by calling Transform
as the first method in the chain (see above).