展平一个列表,其属性之一是另一个对象列表 [英] Flatten a list which one of its properties is another list of object

查看:54
本文介绍了展平一个列表,其属性之一是另一个对象列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下课程:

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; }
}

我想将List<Main>转换为FlatList所在的List<FlatList>

I want to convert List<Main> to List<FlatList> where FlatList is

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
}

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

Unfortunately I haven't been able to figure out the LinQ query to perform this operation.

推荐答案

您应使用

You should use SelectMany to flatten a sequence of Main objects:

将序列的每个元素投影到IEnumerable并展平 产生的序列变成一个序列.

Projects each element of a sequence to an IEnumerable and flattens the resulting sequences into one sequence.

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

So it projects each Main object into sequence of FlatList objects and then flattens resulting sequences into one FlatList sequence

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

这篇关于展平一个列表,其属性之一是另一个对象列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆