我有以下EF linq查询,用于获取所有员工或特定员工(如果empId具有值)。
但是EF没有生成预期的查询,并且它始终忽略OR条件。
但是EF没有生成预期的查询,并且它始终忽略OR条件。
from employee
where employee.DepartmentId == depId && ((employee.Id == empId) || (employee.Id == null))
.ToList()
期望查询
SELECT * FROM Employee
WHERE DepartmentId = @DepId AND (Id=@empId OR Id IS NULL)
传递值时EF生成的查询
SELECT * FROM Employee
WHERE DepartmentId = @DepId AND (Id=@empId)
当值为空时,EF生成的查询
SELECT * FROM Employee
WHERE DepartmentId = @DepId AND (Id IS NULL)
注意:没有ID值为空的员工记录,而是返回0而不是所有员工记录
如何编写与此Id=@empId OR Id IS NULL
相对应的linq代码?
NULL
的ID(根据你在“注意事项”中所说的是不可能的)。那么你实际上想要什么呢?我猜你想要在值为null
时绕过检查,但这与你的SQL查询所做的是不同的。 - Tim SchmelterEmployee
表中有任何Id
为null
的行对我来说似乎很奇怪。这不是该表的主键吗?如果不是,你可能需要考虑重新命名它。 - DavidGpublic int Id {get; set; }
,这就是为什么EF生成了那个查询。 - Gianpiero(Column=@value OR Column IS NULL)
的语法。我尝试了同样的方法在EF中,但对我来说没有起作用。 - Developer