如何在Select期间计算实体类中的一个属性?

时间:2013-03-13 16:24:08

标签: c# linq linq-to-sql

我的表Persons的出生日期栏名为DOB

在我的dbml文件中,我添加了一个名为single的其他Age属性。

在Linq查询中,如何在Age中返回从今天广告DOB计算的年龄?也就是说,我如何实现下面的虚构代码:

 DataClasses1 db = new DataClasses1();
 var pp = from p in db.Persons
       select new Person()
                   {  
                      Name = p.Name, // ... clone all the other properties ...
                      Age = (DateTime.Today-p.DOB).Days/365
                   }

是否有另一种实现相同目标的方法?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以将年龄计算逻辑放入Age属性,并仅从数据库下载出生日期:

public int Age 
{
   get { 
      DateTime today = DateTime.Today;
      int age = today.Year - DOB.Year;
      if (DOB > today.AddYears(-age)) age--;
      return age;
   }
}

如果你想在服务器端计算年龄(根据问题的标签,这是一个LINQ to SQL代码):

from p in db.Persons
let age = SqlMethods.DateDiffYear(p.DOB, DateTime.Today)
select new Person {  
    Name = p.Name,
    Age = SqlMethods.DateDiffDay(DateTime.Today.AddYears(-age), p.DOB) > 0 ? 
              age - 1 : age
}