LINQ方法如何使用Parent类中的附加列选择多个

war*_*990 4 c# linq

我有一节课:

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; }
}
Run Code Online (Sandbox Code Playgroud)

有了Parent对象,这就是我获得所有Childs价值的方式.

Parent obj = GetParent();
PrintExcel(obj.SelectMany(sm => sm.Childs);
Run Code Online (Sandbox Code Playgroud)

但我也想ParentName在select命令中包含值,如何实现呢?

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

SELECT
    p.ParentName,
    c.ChildName
FROM
    Parent p
    INNER JOIN Child c ON
        p.ParentID = c.ParentID
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 13

您的LINQ示例存在缺陷.假设你有一个序列Parent(即IEnumerable<Parent>IQueryable<Parent>调用)parents,您可以访问内部的家长SelectMany至少在两个方面:

(A)Select在内部使用SelectMany:

parents.SelectMany(p => p.Childs.Select(c => new { p.ParentName, c.ChildName }))
Run Code Online (Sandbox Code Playgroud)

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

parents.SelectMany(p => p.Childs, (p, c) => new { p.ParentName, c.ChildName })
Run Code Online (Sandbox Code Playgroud)

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

(from p in parents from c in p.Childs select new { p.ParentName, c.ChildName })
Run Code Online (Sandbox Code Playgroud)