2017-02-08 3 views
1

Я новичок в LINQ, и я немного запутался в том, как писать IF ELSE в LINQ.Как написать LINQ с несколькими условиями

В настоящее время LINQ, что я создал это:

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(); 

Теперь я хотел бы получить DOB из списка и рассчитать текущий возраст, основываясь на текущей дате, а затем классифицировать его в возрастной группы (текущая версия напрямую получает возрастную группу из базы данных).

Имеющаяся возрастная группа:

  • НИЖЕ 25 (идентификатор 1)

  • 26-35 (ИД 2)

  • 36-45 (идентификатор 3)

  • 46-55 (идентификатор 4)

  • 5 5 и выше (идентификатор 5)

Например, если член DOB является 1990-01-15, он принадлежит к 2. возрастной группе, если член DOB является 1970-12-20, он принадлежит 4. возрастная группа

Я stucked в этой кодировке:

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(); 

ли кто-нибудь из вас может мне помочь с этим? Спасибо !

UPDATE:

У меня есть идея обновить все строки с помощью LINQ, когда кнопка нажата. Например, пользователь нажимает кнопку, затем система проверяет каждого пользователя DOB, а затем обновляет свою возрастную группу в базе данных.

Например, если человек А DOB является 1990-01-01, его/ее возрастная группа будет автоматически обновляться до 2, если человек B DOB является 1970-05-15, его/ее возрастная группа обновит до 4.

Как написать linq для обновления всех строк в базе данных? Благодарим за помощь!

+0

Ну я бы не попробовать написать все, что логика с вложенными условными операторами. Просто напишите метод, который вычисляет, что возраст проверяет группу, в которой он находится, и возвращает соответствующий идентификатор. – juharr

+0

Вам лучше просто добавить вычисляемый столбец в своей базе данных: https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx – MarcinJuraszek

ответ

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

}).ToList(); 

Вы можете создать метод GetAgeGroup, в котором вы будете давать текущую дату рождения. Из вашего объяснения a.Dob: DateTime. После этого подсчитывают возраст человека и поставить правильный 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

Спасибо за ваше предложение, но у меня есть другой идея, которая заключается в обновлении столбца agegroup_id базы данных в таблице «человек». Например, при запуске системы база данных запускает linq, который автоматически обновляет все строки на основе сегодняшней даты.Я уже написал расчет для расчета текущего возраста на основе сегодняшней даты. Но можете ли вы научить меня, как обновлять несколько строк в таблице «человек»? Я напишу более подробно в вопросе выше. Большое спасибо! @mybirthname – chonglt

+0

Этот код странный ... почему вы проверяете, превышает ли возраст более 25 человек, когда вы уже проверили, что он был равен или равен 25? 'if (age <= 25) return 1; else if (age <= 35) return 2; еще если (возраст <= 45) возвращение 3; else if (age <= 55) return 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

Благодарим вас за предложение, но у меня есть другая идея, которая заключается в обновлении столбца agegroup_id базы данных в таблице «человек». Например, при запуске системы база данных запускает linq, который автоматически обновляет все строки на основе сегодняшней даты. Я уже написал расчет для расчета текущего возраста на основе сегодняшней даты. Но можете ли вы научить меня, как обновлять несколько строк в таблице «человек»? Я напишу более подробно в вопросе выше. Большое спасибо! @Rick – chonglt

+0

Какой ORM вы используете в этом коде? EF или Linq2sql? Foreach (var p в lstRecord) {p.AgeGroupID = 1? 2? 3 ...} db.SubmitChanges(); (Linq2Sql), ctx.SaveChanges(); (EF) – Rick

+0

, если данные таблицы «большой», это не очень хорошая идея. это просто мое предложение. – Rick

Смежные вопросы