2016-04-26 5 views
1
  1. Bitte haben Sie Geduld beim Lesen der Frage, wie ich dies ein wenig schwer zu finden bin zu erklären.
  2. Bitte schlagen Sie einen besseren Titel vor, damit es anderen in der Gemeinschaft hilft.

Ich habe 3 Felder. nämlich.Zeitpunkt des Inkrafttretens und Verfallsdatum eines Adresstyp

  1. Adresstyp - Dropdown (Werte: 'Abrechnung', 'Unternehmens')
  2. Datum des Inkrafttretens - Datumsauswahl (mm/tt /), verpflichtende
  3. Expiration Date - Datepicker (mm/tt /), nicht zwingend

ich in Not bin die folgende Validierung anzuwenden: Kann nicht hat zwei Adressen mit dem gleichen Typ aktiv zugleich.

Bitte unten Screenshot für Beispiele beziehen.

enter image description here

Jetzt habe ich bekam 2 Liste (Datetime) viz. AdressenEffectiveDatesList, AdressenExpirationDatesList in C#. Ich weiß nicht, wie ich das erreichen soll.

+0

tun, um die effektive Adresse Daten haben, um – SadiRubaiyet

Antwort

2

Ich habe eine Geige für Sie erstellt here

Ich würde Ihnen vorschlagen, als auch die Client-seitige Validierung zu tun. Ich habe Ihre Liste der Daten in Ordnung ist, so i-te Element von Start- und Enddatum würde bedeuten i-te Intervall angenommen, so etwas in der Linie der

  //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."; 
       } 
      } 

würde so lange den Trick, wie die Daten in Aufträgen (wie in effektiven Daten). Hoffe, das hilft

Update: Ich habe die Geige aktualisiert, um sicherzustellen, dass nichts mit dem unendlichen Bereich überschneidet. [Check this] (https://dotnetfiddle.net/nmyA3P)

+0

Hey @SadiRubaiyet, Danke für die Geige. Ablaufdaten sind nicht obligatorisch. Das erste Szenario, das Sie geschrieben haben, ist ein gültiges Szenario. Wenn das Ablaufdatum null ist und ein zweites Gültigkeitsdatum vorhanden ist, sollte das Programm "Keine 2 aktive Rechnungsadresse" zurückgeben, da das Ablaufdatum für den ersten Bereich null war und das bedeutet, dass der erste Bereich niemals abläuft. Daher sollte der Benutzer keinen weiteren Datumsbereich hinzufügen können. Hoffe, ich könnte erklären, – mathewtinuthomas

+0

Ja, Sie könnten auch einige Client-Side-Logik implementieren, die Sie so leicht tun können. Wenn die Antwort Ihnen geholfen hat, bitte markieren Sie es akzeptiert oder hilfreich, froh zu helfen – SadiRubaiyet

+0

die Antwort ist definitiv hilfreich, aber können Sie bitte aktualisieren die Geige mit dem oben genannten Fall. – mathewtinuthomas

1

Sie müssen überprüfen, ob sich die Datumsbereiche überschneiden. Es gibt eine gute Antwort hier: Determine Whether Two Date Ranges Overlap

Grundsätzlich

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

Und Sie können Objekte mit < Datetime = und> = in C# vergleichen.

Wie SadiRubaiyet im Kommentar erwähnt, würde es Dinge schneller machen, wenn Sie die Adressen jeder Person nach Startdatum geordnet hätten, weil es bedeutet, dass Sie nur jeden Datumsbereich mit dem nächsten vergleichen müssen.

Wenn sie nicht bestellt wurden, müssten Sie jeden Datumsbereich mit jede andere Adresse für diese Person vergleichen.

Verwandte Themen