У меня есть около 100 000 строк общих данных.Столбцы / Свойства этих данных определяются пользователем и имеют обычные типы данных (string, int, double, date).Там будет около 50 столбцов / свойств.
У меня есть 2 потребности:
Чтобы иметь возможность вычислять новые столбцы / свойства, используя выражение например, Столбец3 = Столбец1 * Столбец2.
В конечном итоге я хотел бы иметь возможность использовать внешние данные с помощью обратного вызова,
Например, Столбец3 = Столбец1 *
GetTempera *простые математические операции, сумма, число и IF являются единственными необходимыми функциями.
Для возможности фильтрации / группировки данных и выполнения агрегации
например, Sum (Data.Column1)Где (Data.Column2 == "бла")
Насколько я вижу, у меня есть два варианта:
1. Использование DataTable .
=> Точка 1 выше достигается с помощью DataColumn.Expression
=> Точка 2 выше достигается с помощью DataTable.DefaultView.RowFilter или DataTable.Select () & C # code
2. ИспользованиеСписок универсальных объектов, каждый из которых содержит Dictionary для хранения значений.
=> Точка 1 может быть достигнута с помощью чего-то вроде NCalc
=> Точка 2 достигается с помощью LINQ
DataTable:
Pros: DataColumn.Expression is inbuilt
Cons: RowFilter & coding c# is not as "nice" as LINQ,
DataColumn.Expression does not support callbacks(?)
=> workaround could be to get & replace external value when creating
the calculated column
GenericList:
Pros: LINQ syntax, NCalc supports callbacks
Cons: Implementing NCalc/generic calc engine
Исходя из вышеизложенного, я думаю, что подход GenericList победит, но я не учел в этом факте производительность, которая по некоторым причинам, я думаю, будет лучше с данными.
Кто-нибудьВы чувствуете себя лучше с производительностью LINQ против DataTable?
Как насчет NCalc?
Как я уже сказал, существует около 100 000 строк данных с 50 столбцами, из которых может быть рассчитано 20.Всего к данным будет применено около 50 правил, поэтому в общей сложности будет выполнено 5 миллионов проверок строк / объектов. Буду признателен за любые идеи.Thx.
пс.Конечно, использование базы данных + SQL & Views и т. Д. Было бы самым простым решением, но по разным причинам не может быть реализовано.