我使用的是 Entity Framework 6,并且只有很少的实体和如下所示的查询:
var results = (from e1 in dataContext.Entity1
.Where(x => x.Key1 == 1)
from e2 in dataContext.Entity2
.Where(x => x.Key2 == e1.Key1)
.DefaultIfEmpty()
from e3 in dataContext.Entity3
.Where(x => x.Key3 == e1.Key1 || x.Key3 == e2.Key2)
.DefaultIfEmpty()
select new
{
E1 = e1,
E2 = e2,
E3 = e3
}).ToList();
由于 Entity2 和 Entity3 的连接是左连接,因此 e2 或 e3 可能为空。我发现如果 e2 为 null,则会引发 System.Reflection.TargetException 异常,并显示消息“非静态方法需要目标”。如果我将连接更改为 Entity3,如下所示,我仍然遇到相同的错误。
from e3 in dataContext.Entity3
.Where(x => x.Key3 == e1.Key1
|| (e2 != null && x.Key3 == e2.Key2))
.DefaultIfEmpty()
如何更改查询?
最佳答案
谢谢大家的建议。终于找到问题所在了。
为了简化问题,我没有告诉 Entity1 实际上是存储过程的返回。我认为它与表相同,因为存储过程返回表中的全部记录。事实证明,有人更改了 Entity Framework 的存储过程包装以返回 Entity1 列表。当我把它改回原来从 EF 生成的代码后,它工作得很好。
关于c# - Entity Framework 左连接多个表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39265651/