2013-05-16 27 views
0

我有DateTime?屬性的類。一般來說,它們是一對(請求/接收)日期。我在我的項目中使用FluentValidation。我可以寫驗證器,它會收到兩個DateTime? params? 條件:使用條件驗證幾個屬性FluentValidation

  1. 要求必須小於或等於接收
  2. 接收不能設置時要求爲null

也許我將有更多的條件在未來。

回答

1

您不能使用LessThanOrEqualTo擴展方法,因爲它不適用於可爲空的日期時間。

有一點仍不清楚,但我可以猜測:如果Receive爲空,Request可以有任何值(甚至爲空),對嗎?

你可以做這樣的事情(我用的一類項目,具有相同的屬性,你的),一步到位的管理你的兩個規則:

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 
+0

謝謝許多。它正在工作。你節省了我的時間。 – user571874