0

我的表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
                   }

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

谢谢。

4

1 回答 1

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
}
于 2013-03-13T16:36:18.437 回答