Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建父级->;来自两个集合的子层次结构_C#_Linq_.net 4.5_Linq To Objects - Fatal编程技术网

C# 创建父级->;来自两个集合的子层次结构

C# 创建父级->;来自两个集合的子层次结构,c#,linq,.net-4.5,linq-to-objects,C#,Linq,.net 4.5,Linq To Objects,我有两个单独的集合实例,其中充满了数据 List<Parent> parents; List<Child> children; 列出父母; 列出儿童名单; 可以通过Child.ParentId和Parent.Children连接两个集合 parents集合没有填充Children属性,因此如何将父对象与子对象链接?尝试以下操作: var result = from d in parents join s in children

我有两个单独的集合实例,其中充满了数据

List<Parent> parents;
List<Child> children;
列出父母;
列出儿童名单;
可以通过Child.ParentId和Parent.Children连接两个集合

parents集合没有填充Children属性,因此如何将父对象与子对象链接?

尝试以下操作:

var result = from d in parents  
             join s in children  
             on d.ParentID equals s.ParentID into g  
             select new  
             {  
                 ParentName = d.ParentName,  
                 ChildList = g  
             };

foreach (var item in result)  
{  
    Console.WriteLine("Parent: {0}", item.ParentName);  
    foreach (var Child in item.ChildList)  
    {  
        Console.WriteLine(Child.Name);  
    }  
    Console.WriteLine();  
}
更新

var result = parents.Join(children,
                     p => p.ParentId,
                     c => c.ParentId,
                     (p,c) => new { parents = p,children = c  })
                     .Select(x => new
                     {
                         ParentName = x.parents.ParentName,  
                         ChildList= x.children
                     })
                     //.GroupBy(x=>x.ParentName )
                     .ToList();

嗨,谢谢你的快速回复。需要明确的是,这是一个左联接操作,没有子项的父项仍将存在?这是分组联接,当我们需要分层数据结构时使用,是的,没有子项的父项将存在。@goran-这段代码将只提供gv me父项数据吗?基于连接,这会提供层次结构吗??
var result = parents.Join(children,
                     p => p.ParentId,
                     c => c.ParentId,
                     (p,c) => new { parents = p,children = c  })
                     .Select(x => new
                     {
                         ParentName = x.parents.ParentName,  
                         ChildList= x.children
                     })
                     //.GroupBy(x=>x.ParentName )
                     .ToList();