我有DateTime?
属性类。一般来说,它们是一对(请求/接收)日期。我FluentValidation
在我的项目中使用过。我可以编写将接收两个DateTime?
参数的验证器吗?条件:
- 请求必须小于或等于接收
- Request 为空时无法设置接收
可能我将来会有更多的条件。
我有DateTime?
属性类。一般来说,它们是一对(请求/接收)日期。我FluentValidation
在我的项目中使用过。我可以编写将接收两个DateTime?
参数的验证器吗?条件:
可能我将来会有更多的条件。
您不能使用LessThanOrEqualTo
扩展方法,因为它不适用于可为空的日期时间。
有一件事还不清楚,但我可能猜到:如果Receive
为空,Request
可以有任何值(甚至为空),对吧?
你可以做这样的事情(我使用了一个类 Item,与你的属性相同),一步管理你的两个规则:
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;
}
测试:
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