2012-02-16 2 views
1

Я собираю дату рождения и дату диагностики в базе данных и хотел бы рассчитать возраст в годах по дате диагностики.Нельзя присвоить свойство или индексатору - он доступен только для чтения

Это мой код. Но у меня ошибка при ошибке.

Ошибка 2 Свойство или индексатор 'LightSwitchApplication.Patient.AgeAtDiagnosis' не могут быть отнесены к - только

partial void AgeAtDiagnosis_Compute(ref int result) 
{ 
     // Set result to the desired field value 
     AgeAtDiagnosis = DateofDiagnosis.Year - DateofBirth.Year; 
     if (DateofBirth > DateofDiagnosis.AddYears(-AgeAtDiagnosis)) 
     { 
      AgeAtDiagnosis--; 
     } 
} 
+0

Зачем нужен 'string'? –

+0

Не будет ли простой минус? – SWeko

+0

вы можете найти точное решение отсюда http://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c –

ответ

2
DateTime birth = new DateTime(1950, 01, 01); 
DateTime diagnosis = new DateTime(2012, 02, 01); 
TimeSpan Span = diagnosis - birth; 
DateTime Age = DateTime.MinValue + Span; 
// note: MinValue is 1/1/1 so we have to subtract... 
int Years = Age.Year - 1; 
+0

источник: http://forums.asp.net/post/ 2486703.aspx – Schiavini

+0

+1 Должно быть так. –

1
TimeSpane age0 = this.DateOfDiagnosis - this.DateOfBirth; 

int age1 = (int) Math.Trunc(age0.TotalDays/365.25); 
+0

TotalYears также не существует в TimeSpan. – Schiavini

0

Вы можете просто вычесть один читается дата от другого, чтобы дать TimeSpan. У этого есть свойство TotalDays, из которого вы можете получить годы. Это зависит от того, насколько точно вы хотите быть:

var ageInDays = (diagnoticDate - dateOfBirth).TotalDays; 
var age = Convert.ToInt32(ageInDays/365); 

Очевидно високосные годы вызывают вопросы, так что другой альтернативы инспектировать год, месяц и день свойства каждой даты и вычислить их различия индивидуально с учетом частичных лет и т.д.