You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:43:15