展平一个列表,其中一个属性是另一个对象列表

use*_*830 4 c# linq

我有以下课程:

public class Owner
{
    public string Id { get; set; }
    public string Name { get; set; }
}
public class Main
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<Owner> Owners { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想转换List<Main>List<FlatList>FlatList 所在的位置

public class FlatList
{
        public string Id { get; set; }          // Id from Main
        public string Name { get; set; }        // Name from Main
        public string OwnerId { get; set; }     // Id from each Owner in a Main's Owner
        public string OwnerName { get; set; }   // Name from each Owner in a Main's Owner
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法找出执行此操作的 LinQ 查询。

Ser*_*kiy 6

您应该使用SelectMany来展平一系列 Main 对象:

将序列的每个元素投影到 IEnumerable 并将结果序列展平为一个序列。

因此它将每个 Main 对象FlatList投影到对象序列中,然后将结果序列展平为一个FlatList序列

var flatList = mainList.SelectMany(m => 
    m.Owners.Select(o => 
        new FlatList { 
              Id = m.Id, 
              Name = m.Name, 
              OwnerId = o.Id,
              OwnerName = o.Name
         })).ToList()
Run Code Online (Sandbox Code Playgroud)