将修剪语句放入LINQ

问题描述 投票:0回答:1

我的数据库中的员工编号开始以这种方式存储

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 然后返回结果。任何建议将不胜感激。

c# linq asp.net-core
1个回答
0
投票

在我看来,你是从错误的方向来处理这个问题的。即使它有效,修剪数据库中的“每个”值是否有意义?当然,计算出员工在数据库中的格式,然后利用数据库索引等进行直接比较要简单得多: // 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
,那就太好了。但我认为这是不可行的。)

© www.soinside.com 2019 - 2024. All rights reserved.