0
我试图重新写了下面的SQL LEFT OUTER使用实体框架6 JOIN查询:实体框架6 - 外连接和方法语法查询
select tblA.*, tblB.*
from dbo.TableA tblA left outer join dbo.TableB tblB on
tblA.Student_id=tblB.StudentId and tblA.other_id=tblB.OtherId
where tblB.Id is null
这里是我当前的C#代码:
using (var db = EFClass.CreateNewInstance())
{
var results = db.TableA.GroupJoin(
db.TableB,
tblA => new { StudentId = tblA.Student_id, OtherId = tblA.other_id },
tblB => new { tblB.StudentId, tblB.OtherId },
(tblA, tblB) => new { TableAData = tblA, TableBData = tblB }
)
.Where(x => x.TableBData.Id == null)
.AsNoTracking()
.ToList();
return results;
}
这里还有以下编译器错误我越来越:
类型参数不能从使用中推断出来。尝试明确指定类型参数 。
概括地说:我需要OUTER JOIN两个DbSet对象通过实体框架可用,在连接使用多列。
我也很确定这不会做正确的左外部连接,即使我没有收到编译器错误;我怀疑我需要在某个地方以某种方式涉及DefaultIfEmpty()
方法。奖励积分,如果你也可以帮助我。
更新#1:它的工作原理,如果我在连接中使用强类型...它是根本无法处理匿名类型,或者我做错了什么?
public class StudentOther
{
public int StudentId { get; set; }
public int OtherId { get; set; }
}
using (var db = EFClass.CreateNewInstance())
{
var results = db.TableA.GroupJoin(
db.TableB,
tblA => new StudentOther { StudentId = tblA.Student_id, OtherId = tblA.other_id },
tblB => new StudentOther { StudentId = tblB.StudentId, OtherId = tblB.OtherId },
(tblA, tblB) => new { TableAData = tblA, TableBData = tblB }
)
.Where(x => x.TableBData.Id == null)
.AsNoTracking()
.ToList();
return results;
}