RX サイトの複合イベント処理ワークショップでは、課題 5 は Buffer を使用して実行されます。LINQ ドットまたはラムバ表記を使用したソリューションがあります。興味深いので、LINQ言語の統合クエリ表記に変換したいと思います。
課題と私のコードが続きます。何らかの理由result2
で正しく動作せず、UI が応答しなくなり、出力が切り詰められたように見えます。これは何かおかしなことですか、それは私の質問ですか、修正できますか?
チャレンジ (ダウンロードはこちら)
IObservable<object> Query(IObservable<StockQuote> quotes)
{
// TODO: Change the query below to compute the average high and average low over
// the past five trading days as well as the current close and date.
// HINT: Try using Buffer.
return from quote in quotes
where quote.Symbol == "MSFT"
select new { quote.Close, quote.Date };
}
私の解決策
IObservable<object> Query(IObservable<StockQuote> quotes)
{
// TODO: Change the query below to compute the average high and average low over
// the past five trading days as well as the current close and date.
// HINT: Try using Buffer.
var result1 = quotes.Where(qt => qt.Symbol == "MSFT").Buffer(5, 1).Select(quoteList =>
{
var avg = quoteList.Average(qt => qt.Close);
return new { avg, quoteList.Last().Close, quoteList.Last().Date };
});
var result2 = from quote in quotes
where quote.Symbol == "MSFT"
from quoteList in quotes.Buffer(5, 1)
let avg = quoteList.Average(qt => qt.Close)
select new { avg, quoteList.Last().Close, quoteList.Last().Date };
return result2;
}