无法将属性或索引器分配给 - 它是只读的

时间:2012-02-16 10:38:21

标签: c# linq ado.net ado.net-entity-data-model

我在数据库中捕获出生日期和诊断日期,并希望按诊断日期计算年龄。

这是我的代码。但是我有错误跟踪错误。

  

错误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--;
        }
}

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

TimeSpane age0 = this.DateOfDiagnosis - this.DateOfBirth;

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

答案 2 :(得分:0)

您可以从另一个日期中减去一个日期以提供TimeSpan。它有一个TotalDays属性,您可以从中获得年份。这取决于你想要的准确度:

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

显然闰年会导致问题,所以另一种选择是检查每个日期的年,月,日属性,并考虑部分年份等单独计算差异