2013-03-13 44 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 
} 
相關問題