我正在尝试使用EF7(7.0.0-rc1-final)、vNext rc1(rc1-final)和SQL Server 2014 执行左外部加入请求
数据库:
宠物:Id,名称
用户:Id,Name,#PetId
这个有效:
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
};
但这个不起作用(消息="序列不包含任何元素"):
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)
};
SQL Server Profile 2014显示第二个请求没有发送到SQL Server。为什么?
我认为第二个查询的投影中的p.Name
没有被处理。
截至RC1,EF7还不知道如何进行左外部联接。简言之,他们意识到这是一件非常重要的事情,他们正在努力
它在github上的第3186期中被报道,一些开发者对此发表了评论
我又责备了自己一句,有点像你。
合作者"maumar"评论:
问题是在Linq(to对象)中LOJ的概念并不存在就其本身而言。
建议的修复方案是使用表示可选导航选择Many GroupJoin DefaultIfEmpty组合,然后折叠此模式转换为关系管道中的LOJ。问题是创建更复杂的查询(主要是由于子查询),并且当前对于大多数非琐碎的情况中断。在我们用导航属性扩展。
我们确实认识到这是一个高优先级的错误,因为它可能会返回错误的结果。