能否在return语句中引用self?如何简化EF员工激活状态切换代码
问题解答
首先明确:C#中没有语法支持直接在赋值语句的右侧引用左侧正在操作的属性,也就是你想要的_dbContext.Employee.Where(x => x.id == id).First().Active = !this.statement这种写法是无法实现的。
你的原始代码存在两个明显问题:
- 两次调用
Where(...).First()会触发两次数据库查询,效率极低 - 两次查询之间如果有其他操作修改了该员工的
Active状态,会导致逻辑错误
虽然你提到知道用变量实现,但这其实是最优且唯一的合理简化方式,既解决了重复查询问题,又保证逻辑安全:
// 只查询一次数据库,获取目标员工对象 var targetEmployee = _dbContext.Employee.First(x => x.Id == id); // 直接切换激活状态 targetEmployee.Active = !targetEmployee.Active;
如果需要处理员工不存在的情况,可以改用FirstOrDefault避免空引用异常:
var targetEmployee = _dbContext.Employee.FirstOrDefault(x => x.Id == id); if (targetEmployee != null) { targetEmployee.Active = !targetEmployee.Active; }
内容的提问来源于stack exchange,提问作者Gyliana
相关产品推荐
相关产品推荐

