如何将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
相关产品推荐
相关产品推荐

