我的表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
}
是否有另一种实现相同目标的方法?
感谢。
答案 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
}