我正在尝试执行连接,如果join返回null,我想要默认值。
我的代码是:
MyVar = from parent in db.ParentTable
join child1 in db.Child1 on parent.Id equals child1.ParentId into j1
select new ParentClass
{
Id = Parent.Id,
Name = Parent.Name,
Children = from child1 in db.Child1
join rm in db.Table1 on Child1.ID equals rm.ChildId
where Child1.ParentId == parent.Id && rm.OperationId == Op.ID
select new Child
{
Name = child1.Name,
ID = child1.ID,
Flag = rm.Value
}
}
}).FirstOrDefault();
db的结构是: 父表:
Id | Name
1 | A
2 | B
Child1表:
ParentId | Id | Name
1 | 21 | A1
1 | 22 | A2
2 | 23 | A3
1 | 24 | A4
表1:
Id | Child1Id | Value | OpID
1 | 21 | False | 123
2 | 21 | False | 124
3 | 21 | true | 125
4 | 22 | true | 126
依旧......
注意:Child1中的多个条目可以具有相同的Parent,Table1中的多个条目可以具有相同的Child1Id。
问题:如果孩子的联接返回为空,我想要显示我的自定义对象:
{
Name = child1.Name,
ID = child1.ID,
Flag = False
}
如果join返回空数组并且应该具有child1.Name和ID,则必须是默认对象。我如何实现这一目标?
答案 0 :(得分:1)
您需要使用left join
,此外还要加入条件Op.ID
:
Children = from child1 in db.Child1
where child1.ParentId == parent.Id
join rm in db.Table1 on new { child1.ID, OpId = Op.ID } equals new { rm.ChildId, rm.OperationId } into joint
from rm in joint.DefaultIfEmpty()
select new Child
{
Name = child1.Name,
ID = child1.ID,
Flag = rm == null ? false : rm.Value
}