私は C# でいくつかのデータ集計機能を構築しようとしています。リアルタイムのピボット テーブルに似たもの、またはselect
、sum
、average
、first
、where
およびgroup-by
( where first
is in 「最初の値を与える」という LINQ の意味)。
たとえば、Trans
列Name
、Date
、およびで呼び出されるある種のテーブル オブジェクトと、列およびTotal
で呼び出される別のテーブルがあるとPrice
します。(擬似SQLで)実行するある種のインスタンスを作成したいName
Price
Query
select Name, sum(Total), first(Price) from Trans, Price join on Name group by Name
Aggregator
データ ソースへのリンクを持つインスタンスにそれを渡します。これに伴い、クエリが生成する行が変更されるたびにヒットするコールバックを登録したいと考えています。したがって、「XYZ」という名前のエンティティの価格が変更された場合、コールバックは、その集計された行の新しい値を含むオブジェクトでトリガーされます。またAggregator
、可能な限り効率的にしたいので、値が変更されるたびにテーブルスキャンを行う必要がないように、何らかのインデックススキームを使用します。
この種のことを何と呼ぶべきかよくわかりません。私が思っているよりも桁違いに複雑ではないと仮定して、C# で何かを完全に実装できることを望んでいます。Continuous LINQ と Bindable LINQ について読んだことがありますが、どちらがこの問題に適合するか、またはパフォーマンスの問題があるかどうか (たとえば、値が変更されるたびに LINQ 集計がテーブル全体で列挙されるなど) があるかどうかはわかりませんでした。
このようなことを行うプロジェクトを知っている人はいますか? または、自分で設計/構築する方法について提案がありますか?
編集:データは実際にはデータベースにあるのではなく、メモリにあることに注意してください。