【发布时间】:2020-10-16 16:48:42
【问题描述】:
var list1 = _context.Employees.Where(x=> x.EmployeeId.Equals(empId)
&& **x.deptIds.Split(",")**.ToList().Any(p => (p!=(deptId.ToString()))));
其中,x.deptIds 是存储为以逗号分隔的字符串的部门 ID。 出现错误“表达式树可能不包含使用可选参数的调用或调用”。如何解决?
【问题讨论】:
-
不要在一开始就在字段中存储多个值。这违反了最基本的设计规则。
String.Split等客户端代码无法转换为 SQL -
但这已经被存储了。这次不能改变桌子的设计。任何替代代码/解决方案?
-
由于您是通过 EmployeeId 查找的,我的第一个猜测是您在Employees 表中只有一个这样的行,所以只需使用
_context.Employees.FirstOrDefault(x => x.EmployeeId == empId)获取整行 -
@GSerg,它有一个解决方案。但这不是一个好方法,因为其中一种解决方案是在数据库对象中采用 .ToList() 然后执行其他过滤操作。这会导致响应时间过长。
标签: c# entity-framework linq .net-core webapi