实体框架 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 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;