Вот как я бы структурировал ваш код - это не полное решение, так как вам нужно будет немного заполнить пробелы - но это должно упростить его.
Я начал с предположения, что у вас будут такие классы:
public class X
{
public Uri Uri { get; set; }
public string Title { get; set; }
public DateTime Date { get; set; }
}
public class Y
{
public System.Drawing.Image Image { get; set; }
public string Description { get; set; }
}
public class Z
{
public Uri Uri { get; set; }
public string Title { get; set; }
public DateTime Date { get; set; }
public System.Drawing.Image Image { get; set; }
public string Description { get; set; }
}
Теперь я создал эти две функции:
Func<IObservable<X>> getX =
() =>
{
/* you must write this code */
};
Func<X, IObservable<Y>> getYFromX =
x =>
{
/* you must write this code */
};
Они представляют две части вашего кода.
Вот как их объединить:
IObservable<Z> getZ =
from x in getX()
from y in getYFromX(x)
select new Z()
{
Uri = x.Uri,
Title = x.Title,
Date = x.Date,
Image = y.Image,
Description = y.Description,
};
Магия Rx, использующая SelectMany
, объединяет две ваши части. Надеюсь, вам будет проще определить функции getX
& getYFromX
.