c# - 如何在 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;
}
页面加载时出现上述错误:
请我需要你的帮助来解决这个问题。我真的不明白我的代码有什么问题。
解决方案
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 端应用方法或进行相同的计算(例如存储过程)。
推荐阅读
- r - 通过 knitr 将 R sweave 文件编译为 pdf 时,\includegraphics{} 命令放错了位置
- file-upload - 在 Web 应用程序上存储上传文档的最佳方式
- javascript - 如何使用 IntersectionObserver 制作无限滚动条,使其不会触底?
- c# - 使用 EF 播种数据
- amazon-web-services - S3API:删除对象元数据
- python - 从弹性搜索中获取每个唯一字段组合的第一个条目
- javascript - 在使用动态数据的滑块中实现 jQuery
- javascript - Express 中的 JS 运行时错误
- java - 更改照片上纸质文本的颜色。(位图)
- python-3.x - 多个服务器的 Discord.py 欢迎消息