LINQ方法如何从父类中选择具有附加列的many

本文关键字:many 选择 方法 父类 LINQ | 更新日期: 2023-09-27 17:52:46

我有一个类:

public class Parent
{
    public int ParentID { get; set; }
    public string ParentName { get; set; }
    public List<Child> Childs { get; set; }
}
public class Child
{
    public int ChildID { get; set; }
    public string ChildName { get; set; }
}

使用Parent对象,以下是我如何获得所有Childs值的方法。

Parent obj = GetParent();
PrintExcel(obj.SelectMany(sm => sm.Childs);

但是我也想在选择命令中包含ParentName值,如何实现这一点?

使用SQL查询,我可以这样做

SELECT
    p.ParentName,
    c.ChildName
FROM
    Parent p
    INNER JOIN Child c ON
        p.ParentID = c.ParentID

LINQ方法如何从父类中选择具有附加列的many

您的LINQ示例有缺陷。假设您有一个名为parentsParent(即IEnumerable<Parent>IQueryable<Parent>)的序列,您可以至少通过两种方式访问SelectMany内部的父级:

(A)在SelectMany中使用Select:

parents.SelectMany(p => p.Childs.Select(c => new { p.ParentName, c.ChildName }))

(B)使用SelectMany重载,允许您传递结果选择器:

parents.SelectMany(p => p.Childs, (p, c) => new { p.ParentName, c.ChildName })

当然,你可以简单地使用查询语法,让编译器为你确定正确的方法:

(from p in parents from c in p.Childs select new { p.ParentName, c.ChildName })