将带有集合的对象序列变成平面序列

Turn sequence of objects with collection into a flat sequence

我有一系列 A 类事件。 A 包含数据对象 B 的枚举。 我想将序列 A 映射到 C,以便它是 B 的平面序列。 我该怎么做?

public class Sandbox
{
    public class A
    {
        public IEnumerable<B> Collection { get; set; }
    }

    public class B
    {

    }

    private readonly IObservable<A> _sequence;

    public Sandbox(IObservable<A> sequence)
    {
        _sequence = sequence;
    }

    public IObservable<B> C
    {
        get { return _sequence.Select(o =>  /* ... */); }
    } 
}

尝试使用 Enumerable.SelectMany,它获取一系列序列并将它们展平。

您确实需要 SelectMany 但不需要 Enumerable SelectMany Observable.SelectMany

public IObservable<B> C
{
    get { return _sequence.SelectMany(o =>  o.Collection); }
}

您正在寻找 this overloadObservable.SelectMany。这需要一个 returns 和 IEnumerable<T>.

的投影函数

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

public IObservable<B> C
{
    get { return _sequence.SelectMany(o => o.Collection); }
}