Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在选择期间计算实体类中的一个属性?_C#_Linq_Linq To Sql - Fatal编程技术网

C# 如何在选择期间计算实体类中的一个属性?

C# 如何在选择期间计算实体类中的一个属性?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我的表Persons有一个名为DOB的出生日期列 在dbml文件中,我添加了一个名为Age的附加single属性 在Linq查询中,如何在Age中返回从今天开始计算的年龄adDOB?也就是说,我如何实现下面的虚构代码: DataClasses1 db = new DataClasses1(); var pp = from p in db.Persons select new Person() {

我的表
Persons
有一个名为
DOB
的出生日期列

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

在Linq查询中,如何在
Age
中返回从今天开始计算的年龄ad
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
                   }
有没有其他方法可以达到同样的目标


谢谢。

您可以将年龄计算逻辑放入
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
}