как рассчитать возраст на день рождения для календаря шамси с WPF в GridView - PullRequest
0 голосов
/ 25 марта 2019

У меня есть вид сетки в wpf (C #), который содержит дату дня рождения. Я использовал приведенный ниже код для расчета возраста для первого ряда. Теперь, как рассчитать всю строку (возраст)?

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    string birth_day = "";

    var query = from u in db.tbl_User select u;
    var result = query.ToList();
    if (result.Count > 0)
    {
        birth_day = result[0].BirthDayDate;
        DateTime birthdaydate = DateTime.Parse(ShamsiToMiladi(birth_day));
        DateTime todaydate = DateTime.Parse(ShamsiToMiladi(PublicVariable.TodayDate));
        int days = todaydate.Day - birthdaydate.Day;
        if (days < 0)
        {
            todaydate = todaydate.AddMonths(-1);
            days += DateTime.DaysInMonth(todaydate.Year, todaydate.Month);
        }
        int months = todaydate.Month - birthdaydate.Month;
        if (months < 0)
        {
            todaydate = todaydate.AddYears(-1);
            months += 12;
        }
        int years = todaydate.Year - birthdaydate.Year;
        MessageBox.Show(string.Format("{0} year{1}, {2} month{3} and {4} day{5}",
        years, (years == 1) ? "" : "s",
        months, (months == 1) ? "" : "s",
        days, (days == 1) ? "" : "s"));
}

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Просто простое foreach:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    var query = db.tbl_User.ToList();

    if (!query.Any())return;

    var results = new List<string>();
    foreach(var user in query){
        var birth_day = user.BirthDayDate;
        DateTime birthdaydate = DateTime.Parse(ShamsiToMiladi(birth_day));
        DateTime todaydate = DateTime.Parse(ShamsiToMiladi(PublicVariable.TodayDate));
        int days = todaydate.Day - birthdaydate.Day;
        if (days < 0)
        {
            todaydate = todaydate.AddMonths(-1);
            days += DateTime.DaysInMonth(todaydate.Year, todaydate.Month);
        }
        int months = todaydate.Month - birthdaydate.Month;
        if (months < 0)
        {
            todaydate = todaydate.AddYears(-1);
            months += 12;
        }
        int years = todaydate.Year - birthdaydate.Year;
        results.Add(
            string.Format(
                "{0} year{1}, {2} month{3} and {4} day{5}",
                years, (years == 1) ? "" : "s",
                months, (months == 1) ? "" : "s",
                days, (days == 1) ? "" : "s"
            )
        );
    }

}
1 голос
/ 25 марта 2019

Недостаточно повторений, чтобы комментировать, но для использования foreach :

if (result.Count > 0)
{
    birth_day = result[0].BirthDayDate;

становится

foreach (var item in result)
{
    // Use result.BirthDayDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...