Linq:Select 不同对象左连接

Linq : Select Different Object Left Join

我有两个合同和一个查询,我想select其中一个基于连接结果,不使用 where 子句,

from a in pContext
     join c in vContext 
       on a.id equals c.id into av 
     from lav in av.DefaultIfEmpty()
if(lav != null )
{
   select new DTO1()
  {
   a.id,
   a.name,
   lav.description
  }
}
else
{
 select new DTO2()
 {
  a.id,
  a.name
 }
}

EF Core 将 LINQ“左连接”转换为 SQL 左连接,在这种情况下您不需要处理空值,因为它需要来自 DbDataReader 的值。简单投影应该有效:

var query =
    from a in pContext
    join c in vContext on a.id equals c.id into av 
    from lav in av.DefaultIfEmpty()
    select new DTO1
    {
        a.id,
        a.name,
        lav.description
    };
from a in pContext
     join c in vContext 
       on a.id equals c.id into av 
     from lav in av.DefaultIfEmpty()
  select new DTO()
  {
   id = a.id,
   name = a.name,
   description = lav != null ? lav.description : "No Specified"
  }

解决方案基于 Svyatoslav Danyliv 使用三元运算符的评论,但条件不同以避免 NullReferenceException.