gpt4 book ai didi

c# - 如何选择父项和过滤后的子项列表(如果存在)(外部联接)

转载 作者:行者123 更新时间:2023-11-30 21:49:55 28 4
gpt4 key购买 nike

我似乎无法弄清楚我认为应该是一件容易的事。我发现的所有帖子似乎都只返回 child ,或者对 null 没有帮助。我有以下类(class)

 public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual List<Child> Children { get; set; }
}

public class Child
{
public int ID { get; set; }
public string Name { get; set; }
public int isCurrent { get; set; }
}

我正在使用 EF,我想返回一个特定的父级和当前子级如果它存在。所以对我来说这就像一个左外连接。我想使用方法扩展,因为我想了解它们如何更好地工作。

这是我试过的一些伪代码。即使他们没有当前的 child ,我似乎也无法让它返回 parent 。

var test  = db.Parents
.Where(p => p.ID == 1)
.Select( p => p.Children.Where(c => c.isCurrent == 1).DefaultIfEmpty()
);

我希望它返回一个 Parent 对象,它的 Children to collection 只填充当前的 child ,如果它有一个。

最佳答案

当您使用 EF 导航属性(就像您所做的那样)时,无需考虑联接 - EF 会为您完成。如果您不设置特殊条件,一对多(例如父级 -> 子级)无论如何都将与左外部联接联接。

因此,您只需专注于想要的结果。例如,如果你想返回一个特定的 parent 和它的当前 child ,你可以使用这样的东西:

var test = (from p in db.Parents
where p.ID == 1
select new
{
Parent = p,
CurrentChildren = p.Children.Where(c => c.isCurrect == 1)
}).FirstOrDefault();

如果你确实只需要一个当前的 child (如果存在的话),那么像这样:

var test = (from p in db.Parents
where p.ID == 1
select new
{
Parent = p,
CurrentChild = p.Children.FirstOrDefault(c => c.isCurrect == 1)
}).FirstOrDefault();

关于c# - 如何选择父项和过滤后的子项列表(如果存在)(外部联接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653445/

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