Linq 联接两个相同类型的对象
本文关键字:两个 同类型 对象 Linq | 更新日期: 2023-09-27 18:34:11
我怎样才能让它工作?我不断收到错误消息,指出 r 在当前上下文中不存在(我在其中放置了 **)。
var query = (
from p in PrerequisitesList
join r in RequirementStatus
on p.ID equals r.ID
into temp
from r in temp.DefaultIfEmpty(new RequirementStatus(p.ID, p.Name, p.Description, **r.Fulfilled**))
select new
{
p.ID
,p.Name
,p.Description
,r.Fulfilled
});
这两种类型完全相同,因此各个值将被覆盖。
该方法
实质上DefaultIfEmpty
提供左外连接。这意味着,如果联接未找到正确顺序中的匹配项,则为回退。如果正确的项目为空,我们就无法真正访问它,对吧?
你必须弄清楚别的东西,因为你犯了一个逻辑错误。
也许您可以通过实际提供默认值来解决它?
像这样:
temp.DefaultIfEmpty(new RequirementStatus(p.ID, p.Name, p.Description, false))
此外,正确的列表与稍后使用RequirementStatus
类型的名称相同,这使得您的示例不可编译。但这可能是一个错字。
我可以看到您在查询中使用了 2 个r
,select new
中的r
可能指的是 join r
中的r
,它超出了范围。无论哪种方式,您都必须使用另一个名称。
var query = ( from p in PrerequisitesList
join r in RequirementStatus on p.ID equals r.ID into temp
from r2 in temp.DefaultIfEmpty(new RequirementStatus(p.ID, p.Name, p.Description, p.Fulfilled))
select new {
p.ID,
p.Name,
p.Description,
r2.Fulfilled
});