我的数据库中的员工编号开始以这种方式存储
EmployeeNumber
E123456
E999999
E666666
E111111
我想编写一个 LINQ 语句来将数据库 EmployeeNumber 与从 web 传递的 employeeId 进行匹配。我尝试编写这样的 LINQ 语句:
_akContext.EmployeeInfos.Where(e => e.EmployeeNumber.TrimStart('E') == employeeId).OrderBy(e => e.EmployeeInfoId).Select(e => e.EmployeeInfoId).ToList();
使用上面的 LINQ 语句,我不断收到错误消息:
.Where(e => e.EmployeeNumber.TrimStart(E) == __TrimStart_0)' could not be translated
以下是截图:
我能想到的唯一方法是循环遍历数据库并删除所有“E”,然后将 EmployeeNumber 与employeeId 进行比较,但这将是两步过程。我想知道是否有任何方法可以在同一个 LINQ 查询中修剪 E 然后返回结果。任何建议将不胜感激。
在我看来,你是从错误的方向来处理这个问题的。即使它有效,修剪数据库中的“每个”值是否有意义?当然,计算出员工将在数据库中的格式,然后利用数据库索引等进行直接比较要简单得多:
// Add any extra logic here such as padding.
var formattedEmployeeId = $"E{employeeId}";
var employees = _akContext.EmployeeInfos
.Where(e => e.EmployeeNumber == formattedEmployeeId)
.OrderBy(e => e.EmployeeInfoId)
.Select(e => e.EmployeeInfoId)
.ToList();
如果您的员工 ID 在数据库中的格式不一致,这可能会成为问题(例如,有些使用
E
,有些使用
EE
,有些根本不使用 E
),但我真的希望这不是案件。 (或者,如果您可以更改数据库,使
EmployeeNumber
实际上是一个 number,那就太好了。但我认为这是不可行的。)