c#,LINQ to Entities不识别方法';Int32

c#,LINQ to Entities不识别方法';Int32,c#,entity-framework,linq,C#,Entity Framework,Linq,当我试图从生日属性在dataGridView中显示年龄时,出现以下错误 LINQ to Entities无法识别方法Int32 CalculateAge(System.Datetime)方法,并且无法将此方法转换为存储表达式 这是我用来计算年龄的函数: private int CalculateAge(string birthday) { int age; if (string.IsNullOrWhiteSpace(

当我试图从生日属性在dataGridView中显示年龄时,出现以下错误

LINQ to Entities无法识别方法Int32 CalculateAge(System.Datetime)方法,并且无法将此方法转换为存储表达式

这是我用来计算年龄的函数:

        private int CalculateAge(string birthday)
        {
            int age;
            if (string.IsNullOrWhiteSpace(birthday)) return 0;

            DateTime empBirthday = Convert.ToDateTime(birthday);
            DateTime today = DateTime.Today;
            age = today.Year - empBirthday.Year;
            if (empBirthday > today.AddYears(-age))
                age--;
            return age;
        }
这将显示在datagradView上

var employee = db.Employee.Where(x => x.EmployeeId == id ).
               Select(b => new
               {
                  Id = b.EmployeeId, 
                  Namn = b.FirstName + " " + b..LastName,
                  Age = CalculateAge(b.DOB.ToString()),
                  Department = b.Department.DepartmentName
                  } ).Tolist();
if employee != null)
{
   dgvEmployee.DataSource = null;
   dgvEmployee.DataSource = employee 

}
但它不适用于CalculateAge函数。我怎样才能解决这个问题?请帮助,并提前感谢您: 错误消息是
“LINQ to Entities无法识别方法'Int32 CalculateAge(System.Datetime)方法,并且此方法无法转换为存储表达式”

尝试查询所需的数据,然后将集合转换为
IEnumerable
,然后使用CalculateAge()方法


尝试查询所需的数据,然后将集合转换为
IEnumerable
,然后使用CalculateAge()方法


与问题无关,但假设
DOB
DateTime
(可能是
DateTime?
),为什么要将其转换为
字符串(
b.DOB.ToString()
),然后再次将其转换为
DateTime
Convert.ToDateTime(生日)
)?@Anderson Pimentel感谢您的回答,但我甚至尝试过Datetime,但得到了与问题无关的相同问题,但假设
DOB
Datetime
(可能是
Datetime?
),为什么要将其转换为
字符串(
b.DOB.ToString()
),然后再次将其转换为
Datetime
Convert.ToDateTime>(生日)
)?@Anderson Pimentel感谢您的回复,但我尝试了Datetime,但遇到了相同的问题。感谢您的回复。我忘了显示部门名称,(我编辑了我的问题)我的employee类中有DepartmentId作为Department yable的外键。因此,如果您编辑代码,那么应该如何编辑?我将它放在e.Department.DepartmentName中,但在select=>b中它不起作用。b,Department.DepartmentNameHi,我根据您的评论进行了编辑。可能会起作用。
DGVEEmployee.DataSource=null
是多余的,y您不需要它。@Anthony McGrath,非常感谢,它工作得很好。再次感谢您的回答。我忘了显示部门名称,(我已编辑了我的问题)我的employee类中有DepartmentId作为Department yable的外键。因此,如果您编辑代码,那么应该如何编辑?我将它放在e.Department.DepartmentName中,但在select=>b中它不起作用。b,Department.DepartmentNameHi,我根据您的评论进行了编辑。可能会起作用。
DGVEEmployee.DataSource=null
是多余的,y你不需要它。@Anthony McGrath,非常感谢你,它工作得很好。再次感谢你
var employee = db.Employee.Where(x => x.EmployeeId == id ).
               Select(e => new { e.EmployeeId, e.FirstName, e.LastName, e.DOB, e.Department.DepartmentName }).
               AsEnumerable().
               Select(b => new
               {
                  Id = b.EmployeeId, 
                  Name = b.FirstName + " " + b.LastName,
                  Age = CalculateAge(b.DOB.ToString()),
                  Department = b.DepartmentName
                  } ).Tolist();
if employee != null)
{
   dgvEmployee.DataSource = employee;
}