实体框架 LINQ 查询将联接左联接到新对象而不是 null

本文关键字:对象 null LINQ 框架 查询 实体 新对象 | 更新日期: 2023-09-27 18:33:54

我基本上是在尝试在我的 LINQ 查询中执行左外部联接,但我想返回左联接对象的空实例而不是 null。我下面的解决方案导致错误:

实体或复杂类型"SubObject2"不能在 LINQ to Entities 查询中构造。

 public MyObjectsHolder GetObjectHolder()
     {
         using (MyEntities ctx = new MyEntities()) 
         {
             var query = (from a in ctx.tableA
                          join b in ctx.tableB on b.FKID equals a.PKID into b_a
                          from b in b_a.DefaultIfEmpty()
                          select new MyObjectsHolder()
                          {
                              SubObject1 = a,
                              SubObject2 = b ?? new SubObject2()
                          });
             return query.FirstOrDefault();
         }
     }

实体框架 LINQ 查询将联接左联接到新对象而不是 null

LINQ to Entities

提供程序之所以抛出它,是因为它无法将该实例化正确转换为 SQL 查询(这正是 LINQ to Entities 所做的)。由于您的方法只返回一个对象,因此我建议您执行以下操作来补偿:

var query = (from a in ctx.tableA
             join b in ctx.tableB on b.FKID equals a.PKID into b_a
             from b in b_a.DefaultIfEmpty()
             select new MyObjectsHolder()
             {
                 SubObject1 = a,
                 SubObject2 = b
             });
var result = query.FirstOrDefault();
if(result != null && result.SubObject2 == null) result.SubObject2 = new SubObject2();
return result;