Linq/Entity Framework中检查记录存在并查询的更简洁实现方式
优化EF Core查询:单次获取存在的记录
你的代码目前会执行两次独立的数据库查询(一次Any,一次FirstOrDefault),完全可以简化为单次查询实现需求,有两种常用方案:
方案1:直接使用FirstOrDefault
直接调用FirstOrDefault并判断返回值是否为null,这会生成单次SQL查询,找到匹配记录就返回对象,找不到则返回null:
var myfoo = _context.Foo.FirstOrDefault(o => o.Id == id); if (myfoo != null) { // 处理找到的记录逻辑 }
方案2:针对主键使用Find方法
如果Id是实体的主键,推荐使用Find方法——它会优先检查DbContext的本地缓存,缓存中存在目标记录时直接返回,无需访问数据库;缓存中没有才会发起单次数据库查询:
var myfoo = _context.Foo.Find(id); if (myfoo != null) { // 处理找到的记录逻辑 }
这两种方案都能避免冗余的数据库请求,同时实现"找到记录则返回对象"的需求,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Daniel Owen
相关产品推荐
相关产品推荐

