我继承了一个拜占庭API,该API通过JSON访问远程数据,查询本身通过TPL处理,由于我不愿讨论的原因使我陷入困境。

因此,我有一个IObservable订阅,因此可以查询该订阅;

mcSub.Take(1).Subscribe(x => x.Markets.ForEach(i => i.Prices.AvailableToBuy.ForEach(t => tabPanel.textBox1.AppendText(i.Id + " Back \t" + t.Size + " @ " + t.Price))));


显然,市场和AvailableToBuy是列表,我的问题是-如何创建LINQ查询/对象以提取i.Id,t.Size和t.Price?

最佳答案

我相信您可以通过以下方式做到这一点:在一个集合中以所有价格将两次展平(先是市场,然后是价格):

//get all prices available to buy:
var pricesAvailableToBuy = mcSub.SelectMany(x => x.Markets)
                           .SelectMany(y => y.Prices.AvailableToBuy)
                           .Select(p => new { p.Id, p.Size, p.Price });


这将为您提供mcSub中所有市场的所有价格,而您的初始声明仅适用于一个市场项目(这也取决于它的调用方式-如果它位于消费者工作任务/线程上,那么它才有意义)。

或者,类似的表述:

var pricesAvailableToBuy = mcSub.SelectMany(x => x.Markets.SelectMany(y => y.Prices.AvailableToBuy))
                           .Select(p => new { p.Id, p.Size, p.Price });

07-28 01:43