我怎样才能让它发挥作用?我不断收到错误消息,指出 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
方法本质上提供了一个左外连接。这意味着如果连接没有找到正确顺序的匹配项,它就是您的后备方案。如果正确的项目为 null,我们就无法真正访问它,对吧?
你必须想出别的东西,因为你犯了逻辑错误。
也许你可以通过实际提供一个默认值来解决它?
像这样:
temp.DefaultIfEmpty(new RequirementStatus(p.ID, p.Name, p.Description, false))
此外,右侧列表的名称与后面使用的 RequirementStatus
类型相同,这使得您的示例无法编译。但这可能是一个错字。
关于c# - Linq连接两个相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228664/