C# 具有实体框架核心的左外部联接
我正在尝试使用EF7(7.0.0-rc1-final)、vNext rc1(rc1-final)和SQL Server 2014执行左外部连接请求 数据库: 宠物:身份证,姓名 用户:Id,Name,#PetId 这一个有效:C# 具有实体框架核心的左外部联接,c#,entity-framework-core,C#,Entity Framework Core,我正在尝试使用EF7(7.0.0-rc1-final)、vNext rc1(rc1-final)和SQL Server 2014执行左外部连接请求 数据库: 宠物:身份证,姓名 用户:Id,Name,#PetId 这一个有效: var queryWorks = from u in _context.Users join p in _context.Pets on u.PetId equals p.Id into pp from
var queryWorks = from u in _context.Users
join p in _context.Pets on u.PetId equals p.Id into pp
from p in pp.DefaultIfEmpty()
select new {
UserName = u.Name,
Pet = p
};
但是这个不起作用(Message=“Sequence contains no elements”):
SQL Server Profile 2014向我显示第二个请求未发送到SQL Server。为什么?我想是你的
p.Name
在第二个查询的投影中没有被处理
到RC1为止,EF7还不知道如何进行左外连接。简言之,他们意识到纠正错误是一件非常重要的事情,他们正在努力
在github上有报道,一些开发人员对此发表了评论
我用另一个有点像你的责备来评论我自己
合作者“maumar”备注:
问题是在Linq(对象)中,LOJ的概念并不存在
靠自己
建议的修复方法是使用
选择Many GroupJoin DefaultIfEmpty组合,然后将其折叠
在我们的关系管道中将模式转换为LOJ。问题是这个
创建更复杂的查询(主要是由于引入了
子查询)和当前大多数非平凡情况下的中断。
我们需要先解决这些bug,然后才能用
导航属性扩展
我们认为这是一个高优先级的bug,因为它可能会返回
结果不正确
这个问题最近已经解决了——问题是EF对使用DefaultIfEmpty的查询做出了一些错误的假设,如果想要在DIE()调用之上编写任何东西,EF会抛出。此修复程序将在下一版本或夜间版本中提供。
var queryFails = from u in _context.Users
join p in _context.Pets on u.PetId equals p.Id into pp
from p in pp.DefaultIfEmpty()
select new {
UserName = u.Name,
PetName = (p == null ? "NULL" : p.Name)
};