如何使用LINQ实现左外连接筛选Table1中与Table2无匹配的记录
基于DBContext的LINQ左外连接实现筛选需求
需求说明
从Table1中查询所有记录,排除那些在Table2中存在匹配(ID和Code同时相等)的记录,必须通过左外连接实现。
示例数据:
- Table1:包含记录ID为1、2、3
- Table2:包含记录ID为1、2
预期结果:仅返回Table1中ID为3的记录
对应的SQL语句:
select t1.* from table1 t1 left outer join table2 t2 on t1.ID = t2.ID and t1.Code = t2.Code where t2.ID is null
LINQ查询实现
使用EF Core的DBContext,对应的查询表达式写法如下:
var query = from t1 in dbContext.Table1 // 基于ID和Code的左外连接,将匹配结果分组到joinedT2 join t2 in dbContext.Table2 on new { t1.ID, t1.Code } equals new { t2.ID, t2.Code } into joinedT2 // 左外连接核心:无匹配项时返回null from t2 in joinedT2.DefaultIfEmpty() // 筛选Table2中无匹配的Table1记录 where t2 == null select t1;
逻辑说明
into joinedT2用于将左外连接的匹配结果创建为分组集合DefaultIfEmpty()确保当Table2中没有匹配项时,t2会被赋值为nullwhere t2 == null对应SQL中的t2.ID is null,精准筛选出目标记录
内容的提问来源于stack exchange,提问作者Rushi
相关产品推荐
相关产品推荐

