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

如何将SQL子查询转换为LINQ Lambda表达式?

统计查询转LINQ Lambda

对应原统计SQL的Lambda表达式写法如下:

分步写法:

// 先获取ChildB中approval为0的orderNumer集合
var validOrderNumbers = _dbcontext.ChildB
    .Where(b => !b.approval) // approval是bool类型,0对应false
    .Select(b => b.orderNumer);

// 统计符合条件的ParentA记录数
var count = _dbcontext.ParentA
    .Where(a => new[] { "Status1", "Status2" }.Contains(a.orderStatus) 
                && validOrderNumbers.Contains(a.orderNumer))
    .Count();

合并写法:

var count = _dbcontext.ParentA
    .Where(a => new[] { "Status1", "Status2" }.Contains(a.orderStatus) 
                && _dbcontext.ChildB.Where(b => !b.approval).Select(b => b.orderNumer).Contains(a.orderNumer))
    .Count();
全列查询转LINQ Lambda

对应原全列查询SQL的Lambda表达式写法如下:

分步写法:

// 先获取ChildB中approval为1的orderNumer集合
var approvedOrderNumbers = _dbcontext.ChildB
    .Where(b => b.approval) // approval是bool类型,1对应true
    .Select(b => b.orderNumer);

// 查询符合条件的所有ParentA记录
var query = _dbcontext.ParentA
    .Where(a => a.orderStatus == "Status1" 
                && approvedOrderNumbers.Contains(a.orderNumer))
    .ToList(); // 调用ToList()执行查询并返回实体列表

合并写法:

var query = _dbcontext.ParentA
    .Where(a => a.orderStatus == "Status1" 
                && _dbcontext.ChildB.Where(b => b.approval).Select(b => b.orderNumer).Contains(a.orderNumer))
    .ToList();

注意事项

  • 实体类中approval为bool类型,SQL里的approval=0对应LINQ的!b.approval,approval=1对应b.approval
  • 原SQL中的orderNumber在实体类里拼写为orderNumer,代码中需保持一致避免错误

内容的提问来源于stack exchange,提问作者user2580179

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:10:29