2016-04-26 41 views
1
  1. 請耐心等待閱讀問題,因爲我發現這個問題有點難以解釋。
  2. 請提出一個更好的標題,以便它可以幫助社區中的其他人。

我有3個領域。即地址類型的生效日期和到期日期

  1. 地址類型 - 下拉(值: '結算', '公司')
  2. 生效日期 - 日期選擇器(毫米/日/年),強制性
  3. 過期日期 - 日期選擇器(毫米/日/年),不是強制性的

我需要應用以下驗證: 不能有兩個地址在同一時間同一類型的主動。

請參考下面的屏幕截圖作爲例子。

enter image description here

現在,我有2列表(日期時間)即。 addressesEffectiveDatesList,addresses在C#中的ExpirationDatesList。我沒有得到如何實現這一目標的線索。

+0

你有效的地址日期爲了 – SadiRubaiyet

回答

2

我創建了一個搗鼓你here

我會建議你做客戶端驗證也是如此。 我假設你的日期列表是爲了,所以第i個開始和結束日期的元素將代表第i個區間,因此只要日期是訂單東西的

  //Checking to make sure all effective dates have end date, except the last one. 
      for (var i = 1; i < effectiveEndDates.Count; i++) 
      { 
       if (!effectiveEndDates[i - 1].HasValue) 
       { 
        result = "cannot have a previous billing address without and end date."; 
       } 
      } 

      //Ensure all the startDates Dates are on or after the next end Date 
      //This solution will work if the effective dates are in order. 
      for (var i = 1; i < effectiveStartDates.Count; i++) 
      { 
       var effectiveEndDate = effectiveEndDates[i - 1]; 
       if (effectiveEndDate != null && effectiveEndDate.Value > effectiveStartDates[i]) 
       { 
        result = "cannot have 2 active billing address."; 
       } 
      } 

行會做的伎倆(如生效日期)。希望這可以幫助

更新:我更新了小提琴,以確保沒有任何重疊的無限範圍。 [檢查這個](https://dotnetfiddle.net/nmyA3P

+0

嘿@SadiRubaiyet,謝謝你的小提琴。 到期日期不是強制性的。所以,你寫的第一個場景是一個有效的場景。如果過期日期爲空,並且如果存在第二個生效日期,則程序應返回'不能有2個活動帳單地址',因爲對於第一個範圍,過期日期爲空,這意味着第一個範圍永遠不會過期。所以用戶不應該添加另一個日期範圍。希望我能解釋一下 – mathewtinuthomas

+0

是的,你可以實現一些客戶端邏輯,這將允許你輕鬆地做到這一點。如果答案幫助你,請將其標記爲已接受或有幫助,很樂意幫助 – SadiRubaiyet

+0

答案肯定有幫助,但你能不能更新與上述案例的小提琴。 – mathewtinuthomas

1

您需要檢查日期範圍是否重疊。有一個很好的答案在這裏:Determine Whether Two Date Ranges Overlap

基本上,

(StartA <= EndB) and (EndA >= StartB) 

你還可以用<> =在C#中比較datetime對象=和。

正如SadiRubaiyet在評論中提到的那樣,如果您將每個人的地址按開始日期排序,它會使事情更快,因爲這意味着您只需將每個日期範圍與下一個日期範圍進行比較。

如果他們沒有訂購,您必須將每個日期範圍與之間的每個作爲該人的其他地址進行比較。