我似乎无法弄清楚我认为应该是一件容易的任务。我发现的所有帖子似乎都只返回 child ,或者对空值没有帮助。我有以下类(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 集合仅填充当前子对象(如果有)。
最佳答案
当您使用 EF 导航属性(正如您所做的那样)时,无需考虑连接 - EF 会为您完成这些操作。如果您不设置特殊条件,一对多
(例如父级 -> 子级)无论如何都将通过左外连接进行连接。
因此,您所需要做的就是专注于期望的结果。例如,如果您想返回特定的父级及其当前的子级,您可以使用如下内容:
var test = (from p in db.Parents
where p.ID == 1
select new
{
Parent = p,
CurrentChildren = p.Children.Where(c => c.isCurrect == 1)
}).FirstOrDefault();
如果您确实只需要一个当前子级(如果存在),则如下所示:
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/