我继承了一个拜占庭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 });