gpt4 book ai didi

C# linq 如果 join 返回 null,则使用默认值执行 join

转载 作者:行者123 更新时间:2023-11-28 23:10:18 25 4
gpt4 key购买 nike

我正在尝试执行连接,如果连接返回 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();

数据库的结构是:父表:

Id | Name
1 | A
2 | B

子 1 表:

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。

问题:如果 Children 的连接返回空,我想像这样显示我的自定义对象:

{
Name = child1.Name,
ID = child1.ID,
Flag = False
}

如果 join 返回空数组并且应该有 child1.Name 和 ID,这必须是一个默认对象。我该如何实现?

最佳答案

您需要使用 left join,并且除了添加到连接条件之外,还需要添加 Op.ID 的 where 子句:

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
}

关于C# linq 如果 join 返回 null,则使用默认值执行 join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com