如何将两段LINQ查询合并为单个查询?嵌套LINQ至另一查询Where子句
合并EF Core LINQ查询的解决方案
你可以直接将获取parentId的查询嵌套到第二个查询的Where子句中,EF Core会自动将其转换为SQL子查询,实现单次数据库查询:
using (var ctx = ContextFactory.CreateDbContext()) { menuEntityList = await ctx.MenuEntity .Where(m => m.ParentId == ctx.MenuEntity .Where(sub => sub.Title == thisVariable) .Select(sub => sub.MenuId) .Single()) .ToListAsync(); }
说明
- 这段代码逻辑和原代码完全一致:先找到
Title匹配thisVariable的菜单ID,再筛选出父ID等于该值的所有菜单。 - EF Core会把嵌套查询解析为SQL中的子查询,只会发起一次数据库请求,避免了两次查询的额外开销。
- 保留了原代码的异常行为:如果没有找到匹配
Title的菜单,Single()会抛出InvalidOperationException,和原代码中SingleAsync()的行为一致。如果需要处理无匹配的场景,可以将Single()替换为SingleOrDefault(),并补充空值判断逻辑。
内容的提问来源于stack exchange,提问作者BlueCardinal
相关产品推荐
相关产品推荐

