Я хочу построить некоторые агрегирующие данные в C #, и я хотел бы, чтобы что-то было похоже на сводную таблицу в реальном времени или какой-то вид постоянно обновляемого SQL-запроса с поддержкой select
, sum
, average
, first
, where
и group-by
(где first
в смысле LINQ «дай мне первое значение»).
Например, у меня может быть какой-то табличный объект с именем Trans
со столбцами Name
, Date
и Total
, а другая таблица с именем Price
со столбцами Name
и Price
, Я хочу создать некоторый экземпляр Query
, который выполняет (в псевдо-SQL)
select Name, sum(Total), first(Price) from Trans, Price join on Name group by Name
и передайте его Aggregator
экземпляру, который имеет ссылки на источники данных. Наряду с этим я хочу зарегистрировать обратный вызов, который срабатывает всякий раз, когда строка, в которой запрос производит изменения. Таким образом, если цена для объекта с именем «XYZ» изменится, обратный вызов сработает с объектом, содержащим новые значения для этой агрегированной строки. Я также хотел бы, чтобы Aggregator
был настолько эффективным, насколько это возможно, чтобы в нем была какая-то схема индексации, чтобы не требовалось сканирование таблицы при изменении значений.
Я не совсем уверен, как назвать такие вещи, и я надеюсь, что смогу реализовать что-то полностью в C #, предполагая, что это не на порядок сложнее, чем я думаю, что это могло бы быть. Я читал о Continuous LINQ и Bindable LINQ, но я не мог по-настоящему ощутить, подходит ли либо эта проблема, или возникнут проблемы с производительностью (например, агрегаты LINQ, перечисляющие всю таблицу при каждом изменении значения).
Кто-нибудь знает о проекте, который делает что-то подобное, на которое я мог бы взглянуть, или есть предложения о том, как спроектировать / собрать его самостоятельно?
edit: я должен отметить, что данные на самом деле не были бы в базе данных, они были бы в памяти.