首页 > 解决方案 > 如何在 Linq、windows 窗体中调用计算年龄和调用方法

问题描述

当我在 dataGridView 表单中加载员工时加载所有员工时收到此错误消息。

“LINQ to Entities 无法识别方法 'int32 CalculateAge(Int32)' 方法,并且此方法无法转换为存储表达式”

这就是我在 dataGridView 中填充它们的方式

private void LoaddEmployees() {
   try
    {
        db = new EmployeeEntities();

        var employees = (from u in db.Users 
                         select new
                         {
                             EmployeeId = u.EmployeeId,
                             UserName = u.UserName,
                             FirstName = u.FirstName,
                             LastName = u.LastName,
                             Birthday = u.Birthday,
                             Age = CalculateAge(u.EmployeeId) // Calling CalculateAge method
                         }).ToList();
        dgvEmployeesList.DataSource = employees;                  
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
} 

这是我有问题的CalculateAge 方法。非常计算(数学)正在工作,但是当我加载我的 dataGridview 时出现错误。

 private int CalculateAge(int employeeId) {

    int age;
    var employeeAge = db.Users.Where(x => x.EmployeeId == employeeId).FirstOrDefault();

            DateTime empBirthday = Convert.ToDateTime(empAge.Birthday);
            DateTime today = DateTime.Today;
            age = today.Year - empBirthday.Year;
            if (empBirthday > today.AddYears(-age)) 
                age--;
                return age; 
}

页面加载时出现上述错误:

请我需要你的帮助来解决这个问题。我真的不明白我的代码有什么问题。

标签: c#entity-framework

解决方案


 var employees = (from u in db.Users 
                                 select new
                                 {
                                     EmployeeId = u.EmployeeId,
                                     UserName = u.UserName,
                                     FirstName = u.FirstName,
                                     LastName = u.LastName,
                                     Birthday = u.Birthday,
                                     Age = CalculateAge(u.EmployeeId) // Calling CalculateAge method
                                 })

您的这部分代码由实体框架转换为 SQL 查询,遗憾的是您的 C# 方法CalculateAge(u.EmployeeId)无法转换为 SQL。您不能将这种自定义方法与IQueryable. 首先检索数据,然后在 SQL 端应用方法或进行相同的计算(例如存储过程)。


推荐阅读