动态连接的可观察物



我使用.NET的可观察到/linq,我想做一个非常简单的事情。在我的应用中,我获得了媒体对象列表:

WebinarMedias = typesRepository.GetWebinarMedias();

这将是IObservable<IList<Media>>。我们处于视图模型中,我将其传递给视图,该视图将进行订阅(在视图模型中创建时,这些是冷可观察的)。那里很好,视图想要媒体。

,但有时我有软件包

typesRepository.GetMonthlyFocusPackages() // IObservable<IList<Package>>

从包装中,我可以获取媒体:

packagesRepository.GetPackageMedias(package.Id) // IObservable<IList<Media>>

我想要的内容:在视图模型中,获取软件包,简化为它们在一个IObservable<IList<Media>>变量中包含的所有媒体的列表,然后在视图中显示。

更视觉上:

input = [package 1 { media 1, media 2 }, package 2 { media 3 }]
output = [media 1, media 2, media 3]

类似的东西:

var allMedias = typesRepository.GetMonthlyFocusPackages()
    .SomeMagicSelect(packages => packages.Select(p => packagesRepository.GetPackageMedias(p.Id)));

我可以做foreach并肯定会使用更多的经典代码,但是我想保持可观察到的感冒,并保持价值从头到尾保持反应性。

我认为这是您需要的:

IObservable<IList<Media>> query =
(
    from packages in typesRepository.GetMonthlyFocusPackages()
    from package in packages.ToObservable()
    from medias in typesRepository.GetPackageMedias(package.Id)
    from media in medias.ToObservable()
    select media
).ToList();

我建议这样做,因为它可以在计算时以更均匀的方式为您提供结果:

IObservable<Media> query =
    from packages in typesRepository.GetMonthlyFocusPackages()
    from package in packages.ToObservable()
    from medias in typesRepository.GetPackageMedias(package.Id)
    from media in medias.ToObservable()
    select media;

相关内容

  • 没有找到相关文章

最新更新