c#,LINQ to Entities不识别方法';Int32
当我试图从生日属性在dataGridView中显示年龄时,出现以下错误 LINQ to Entities无法识别方法Int32 CalculateAge(System.Datetime)方法,并且无法将此方法转换为存储表达式 这是我用来计算年龄的函数: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(
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;
}