Reputation: 589
I have class with DateTime?
properties. In general they are pair (request/receive) of dates. I used FluentValidation
in my project. Can I write validator which will receive two DateTime?
params?
Conditions:
Probably I will have more conditions in future.
Upvotes: 0
Views: 1615
Reputation: 60493
You can't use LessThanOrEqualTo
extension method, as it's not available for nullable datetimes.
One thing is still not clear, but I may guess : if Receive
is null, Request
can have any value (even null), right ?
You could do something like that (I used a class Item, with the same properties as yours), managing your two rules in one step :
public ItemValidator()
{
RuleFor(m => m.Request)
.Must((x, y) => CheckRequestAndReceive(x));
}
private static bool CheckRequestAndReceive(Item item)
{
//Reveive can't be set when Request is null
if (item.Request == null)
return item.Receive == null;
//Request can be anything if Receive is null
if (item.Receive == null)
return true;
//Request must be less or equal to Receive
return item.Receive.Value >= item.Request.Value;
}
Tests :
var item = new Item
{
Receive = DateTime.Now
};
var errors = new ItemValidator().Validate(item);// => ERROR
var item2 = new Item()
{
Request = DateTime.Now
};
errors = new ItemValidator().Validate(item2); //=> OK
var dt = DateTime.Now;
var item3 = new Item
{
Receive = dt,
Request = dt
};
errors = new ItemValidator().Validate(item3); //=> OK
var item4 = new Item
{
Receive = DateTime.Now,
Request = DateTime.Now.AddDays(1)
};
errors = new ItemValidator().Validate(item4); //=> ERROR
Upvotes: 2