2017-11-29 21 views
1

.NET의 observables/LINQ를 사용하며 매우 간단한 작업을 수행하려고합니다.관측 가능 부분을 동적으로 연결

WebinarMedias = typesRepository.GetWebinarMedias(); 

이는 IObservable<IList<Media>> 될 것입니다 : 내 응용 프로그램에서 나는 미디어 객체의 목록을 얻을. 우리는 뷰 모델을 사용하고 있습니다. 뷰를 통해 뷰를 전달합니다 (뷰 모델에서 생성 된 콜드 관측 가능 항목). 괜찮습니다.보기에는 Medias가 필요합니다.

하지만 가끔은 내가 패키지이 : 패키지에서

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))); 

내가 foreaches을하고 있는지에 대한 더 많은 고전적인 코드를 사용하지만 관찰 추위를 유지하고 값을 유지하고 싶습니다 수 반응은 끝에서 끝까지.

답변

3

나는이 당신이 필요 생각 : 그들은 계산으로 그것은 당신에게 더도 방식으로 결과를 제공으로

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; 
+0

감사를 당신의 대답,하지만 이것은 관측 가능을 깨뜨리는 것 같습니다. 구독()은 더 이상 효과가 없습니다 (나는 데이터를받지 못합니다). 또한 표현식의 최종 서명은'IList '(medias의 목록에서 관찰 가능하지만 medias의 관찰 가능 항목이 아닌)을 기대하는'Media'입니다. –

+0

@MorganTouvereyQuilling - 먼저 'IObservable '을 요청한 쿼리를 제공했지만 결과를 제공하는 더 좋은 방법은 두 번째 쿼리'IObservable '을 사용하는 것이 좋습니다. 그렇게 원하지 않으면 두 번째 쿼리를 무시하십시오. – Enigmativity

+0

@MorganTouvereyQuilling - 어떻게 당신의'typesRepository' 객체를 인스턴스화하고 있습니까? 'IDisposable'입니까? 질문에 해당 코드를 표시 할 수 있습니까? – Enigmativity