我使用.NET的可观察性/ LINQ,我想做一件非常简单的事情。在我的应用程序中,我得到了媒体对象列表:
WebinarMedias = typesRepository.GetWebinarMedias();
这将是一个IObservable<IList<Media>>
。我们是一个视图模型,我把它传递给一个视图,它将执行订阅(当在视图模型中创建这些视图时,这些都是可观察到的冷值)。好吧,很好,风景需要媒体。
但有时我有包裹
typesRepository.GetMonthlyFocusPackages() // IObservable<IList<Package>>
从一个包裹里,我可以得到Medias:
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)));
当然,我可以预见并使用更经典的代码,但我希望保持可观察的寒冷,并保持值从一端到另一端的反应性。
发布于 2017-11-29 02:34:35
我想这就是你需要的:
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;
https://stackoverflow.com/questions/47550472
复制相似问题