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
.
我有两个合同和一个查询,我想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
.