c# - Entity Framework 左连接多个表失败

标签 c# entity-framework-6 left-join

我使用的是 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/

相关文章:

c# - 使用 C# 备份的 MySQL 备份在中间停止

c# - 保存具有多个父项的 EF 实例

sqlite - SQL/SQLite : Left join only if multiple columns match, 为连接结果选择字段

c# - 无法将表格从模型浏览器拖到 edmx 设计界面

MySQL返回左连接表没有记录的记录

sql - Mysql Left Join Null 结果

c# - HttpRequestMessage 和摘要认证

c# - 无法在 nuget 包管理器 visual studio 2015 安装 "Microsoft.AspNet.Razor 3.2.3"

c# - 嵌套列表上的 Linq - 选择所有 ID

.net - 一对一的可选关系,两端可选且两个 FK