我无法组合两个依赖的Observable(意味着需要一个序列的结果作为另一个序列的输入)。
我有两种方法:
IObservable<List<Message>>
IObservable<ExtraInfoOfMessage>
(带输入参数Message
)对于方法1返回的每条消息,我必须执行方法2并将结果添加到Message对象。
我知道有CombineLatest
,Zip
等方法。但在我看来,所有这些方法都结合了不依赖的序列(意味着一个序列的结果不需要能够执行第二个序列)。
IObservables
这可能吗?有人能给我一个如何解决这个问题的开始吗?
答案 0 :(得分:1)
所以,如果我明白了,你的签名就像这样:
IObservable<List<Message>> Method1()
IObservable<ExtraInfoOfMessage> Method2(Message parameter)
而且,您的消息如下所示:
public class Message
{
public ExtraInfoOfMessage ExtraInfoOfMessage { get; set; }
}
然后你可以这样做:
Func<Message, ExtraInfoOfMessage, Message> combine = (m, e) =>
{
m.ExtraInfoOfMessage = e;
return m;
};
IObservable<Message> query =
from messages in Method1()
from message in messages
from extra in Method2(message)
select combine(message, extra);
如果您希望查询返回消息列表,请执行以下操作:
IObservable<IList<Message>> query =
(
from messages in Method1()
from message in messages
from extra in Method2(message)
select combine(message, extra)
).ToList();