2017-02-08 7 views
1

Ich bin neu in LINQ und ich bin ein bisschen verwirrt, wie IF ELSE in LINQ schreiben.Wie schreibe ich LINQ mit mehreren Bedingung

Die aktuelle LINQ, die ich geschaffen habe, ist:

lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       AgeGroupId = a.AgeGroup_id!=null? a.AgeGroup_id.Value: 0, 
       AgeGroupText = a.Agegroup!=null?a.Agegroup.Description: "", 
      }).ToList(); 

Nun möchte Ich mag die DOB aus der Liste erhalten und das aktuelle Alter der Zeitpunkt, basierend auf heute berechnen, dann ist es in der Altersgruppe kategorisieren (die aktuelle Version wird direkt die Altersgruppe aus der Datenbank bekommen).

Die verfügbare Altersgruppe ist:

  • unter 25 (ID ist 1)

  • 26-35 (ID 2)

  • 36-45 (ID 3)

  • 46-55 (ID ist 4)

  • 5 5 und höher (ID 5)

Wenn zum Beispiel Mitglied DOB 1990.01.15 ist, wird er gehört 2. zu Altersklasse, wenn Mitglied DOB 1970.12.20 ist, er gehört zu 4. Altersklasse

I stucked bin in dieser Codierung:

lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       Age = DateTimeUtility.GetCurrentAge(a.Dob), 
       //I dont know how to continue in this part, my idea is if the age is 0-25, the agegroup_id is 1, if the age is 30, the agegroup_id is 2. 

}).ToList(); 

ist jemand von euch mir dabei helfen? Vielen Dank !

UPDATE:

Ich habe eine Idee von Update alle Zeilen mit LINQ, wenn die Schaltfläche geklickt. Wenn der Benutzer beispielsweise auf eine Schaltfläche klickt, wird das System jede Person DOB überprüfen und dann ihre Altersgruppe in der Datenbank aktualisieren.

Zum Beispiel, wenn Person A DOB 1990-01-01 ist, seine/ihre Altersklasse automatisch auf 2 aktualisiert wird, wenn Person B DOB 1970.05.15 ist, seine/ihre Altersklasse wird bis 4. aktualisiert

Wie schreibe ich eine Linq, um alle Zeilen in der Datenbank zu aktualisieren? Vielen Dank für Ihre Hilfe!

+0

Nun würde ich nicht versuchen, die Logik alle mit verschachtelten bedingten Operatoren zu schreiben. Schreiben Sie einfach eine Methode, die berechnet, dass das Alter das Band, in dem es sich befindet, überprüft und die entsprechende ID zurückgibt. – juharr

+0

Sie wäre besser, nur berechnete Spalte in Ihrer Datenbank hinzufügen: https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx – MarcinJuraszek

Antwort

1
lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       Age = DateTimeUtility.GetCurrentAge(a.Dob), 
       AgeGroupID = GetAgeGroup(a.Dob); 

}).ToList(); 

Sie könnten Methode erstellen GetAgeGroup, in dem Sie das aktuelle Geburtsdatum geben werden. Von Ihrer Erklärung a.Dob ist DateTime. Danach können Sie das Alter der Person sind zu berechnen und setzen die korrekte AgeGroupID

public int GetAgeGroup(DateTime birthYear) 
{ 
    //here you can reuse your method DateTimeUtility.GetCurrentAge(a.Dob), 
    // I just wrote the logic because I'm not sure if it is correct. 
    int age= DateTime.Now.Years - birthYear.Years; 

    if (birthYear > DateTime.Now.AddYears(-years)) 
     age--; 

    if(age<=25) 
     return 1; 
    else if(age> 25 && age<=35) 
     return 2; 
    else if(age> 35 && age<=45) 
     return 3; 
    else if(age> 45 && age<= 55) 
     return 4; 
    else if(age> 55) 
     return 5 
    else 
     return -1; // this will represent invalid age 
} 
+0

Vielen Dank für Ihren Vorschlag, aber ich habe einen anderen Idee, die Datenbank agroup_id Spalte in der Tabelle "Person" zu aktualisieren ist. Zum Beispiel führt die Datenbank beim Systemstart eine linq aus, die alle Zeilen basierend auf dem heutigen Datum automatisch aktualisiert.Ich habe die Berechnung bereits geschrieben, um das aktuelle Alter basierend auf dem heutigen Datum zu berechnen. Aber kannst du mir beibringen, wie man mehrere Zeilen in der Tabelle 'person' aktualisiert? Ich werde mehr Details in der obigen Frage schreiben. Vielen Dank! @mybirthname – chonglt

+0

Dieser Code ist seltsam ... warum überprüfen Sie, ob das Alter mehr als 25 ist, wenn Sie bereits überprüft, war es unter oder gleich 25? 'if (Alter <= 25) zurück 1; sonst wenn (Alter <= 35) zurück 2; sonst wenn (Alter <= 45) zurück 3; sonst wenn (Alter <= 55) zurück 4; else return 5' – Hogan

1
lstRecord = (from a in lstPerson 
     select new GeneralCommonFunctions.MemberDetailSumary 
     { 
      Age = DateTimeUtility.GetCurrentAge(a.Dob), 
     }).Select(t=>new GeneralCommonFunctions.MemberDetailSumary{ 
         Age=t.Age, 
         AgeGroupID = t.Age<=25?1:t.Age<=35?2:t.Age<=45?3:t.Age<=55?4:5, 
        }).ToList(); 
+0

Vielen Dank für Ihren Vorschlag, aber ich habe eine andere Idee, die Datenbank agroup_id Spalte in der Tabelle 'Person' zu aktualisieren ist. Zum Beispiel führt die Datenbank beim Systemstart eine linq aus, die alle Zeilen basierend auf dem heutigen Datum automatisch aktualisiert. Ich habe die Berechnung bereits geschrieben, um das aktuelle Alter basierend auf dem heutigen Datum zu berechnen. Aber kannst du mir beibringen, wie man mehrere Zeilen in der Tabelle 'person' aktualisiert? Ich werde mehr Details in der obigen Frage schreiben. Vielen Dank! @Rick – chonglt

+0

Welche ORM verwenden Sie in diesem Code? EF oder Linq2sql? Foreach (var p in lstRecord) {p.AgeGroupID = 1? 2? 3 ...} db.SubmitChanges(); (Linq2Sql), ctx.SaveChanges(); (EF) – Rick

+0

Wenn die Daten der Tabelle 'Person' groß sind, ist dies keine gute Idee. Es ist nur mein Vorschlag. – Rick

Verwandte Themen