2013-03-13 138 views
0

我的表Persons的出生日期栏名为DOB如何在Select中计算实体类中的一个属性?

在我的dbml文件中,我添加了一个名为Agesingle属性。

在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 
        } 

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

谢谢。

回答

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到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 
} 
相关问题