使用selectmany linq展平分层的类型列表

时间:2014-06-04 22:08:48

标签: c# linq list ienumerable

想要看看是否有人可以提供有关如何在使用selectmany时压缩列表聚合的任何建议。欢迎任何建议。

我想要包含该计划在内的所有元素的清单。创建一个我可以搜索的列表。

谢谢!

Program prog = new Program
            {
                Mods = new List<Mods>
                {
                    new Mods
                    {
                        Acts = new List<Acts>
                        {
                            new Acts
                            {
                            },
                            new Acts
                            {
                            }
                        }
                    },
                    new Mods
                    {
                        Acts = new List<Acts>
                        {
                            new Acts
                            {
                            },
                            new Acts
                            {
                            }
                        }
                    },
                }
            };

//everything is an Element.            
var pes = new List<Element> {prog};
pes.AddRange(prog.Mods.ToList<Element>());
pes.AddRange(prog.Mods.SelectMany(m => m.Acts).ToList<Element>());

1 个答案:

答案 0 :(得分:0)

这个怎么样?

var pes =
    Enumerable.Repeat<Element>(prog, 1)
        .Concat(prog.Mods)
        .Concat(prog.Mods.SelectMany(m => m.Acts))
        .ToList();

这假设IEnumerable<T>是协变的(C#4.0或更高)。如果不是,你可以这样做:

var pes =
    Enumerable.Repeat<Element>(prog, 1)
        .Concat(prog.Mods.Cast<Element>())
        .Concat(prog.Mods.SelectMany(m => (Element)m.Acts))
        .ToList();