【问题标题】:Flatten a list which one of its properties is another list of object展平一个列表,其中一个属性是另一个对象列表
【发布时间】:2017-12-04 03:59:09
【问题描述】:

我有以下课程:

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&lt;Main&gt; 转换为 List&lt;FlatList&gt;,其中 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
}

很遗憾,我无法找出执行此操作的 LinQ 查询。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

    将序列的每个元素投影到 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()
    

    【讨论】:

      【解决方案2】:
      List<Main> mainList = ...
      var flatList = (
          from main in mainList
          from owner in main.Owners
          select new FlatList {
              Id = main.Id, Name = main.Name,
              OwnerId = owner.Id, OwnerName = owner.Name
          }).ToList();
      

      【讨论】:

        【解决方案3】:

        您可以使用 linq(幕后的秘密循环)来做到这一点:

        from m in mainList
        from o in m.Owners
        select new FlatList
        {
           Id  = m.Id,
           Name = m.Name,
           OwnerId = o.OwnerId ,
           OwnerName = o.OwnerName 
        };
        

        【讨论】:

          猜你喜欢
          • 2014-07-31
          • 1970-01-01
          • 2021-08-10
          • 2016-09-03
          • 2017-09-13
          • 2013-05-01
          • 1970-01-01
          • 2012-06-14
          • 1970-01-01
          相关资源
          最近更新 更多