У меня есть приблизительно 100 000 строк универсальных данных. Столбцы/Свойства этих данных являются определяемыми пользователем и обычных типов данных (строка, интервал, дважды, дата). Будет приблизительно 50 столбцов/свойств.
У меня есть 2 потребности:
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 миллионов сканирований строки/объекта.
Действительно ценил бы любое понимание. Спасибо.
PS. Конечно, с помощью базы данных + SQL & Views и т.д. была бы самым легким решением, но по различным причинам не может быть реализован.
Что ж, использование DataTable не исключает использования LINQ
table.Rows.Cast<DataRow>() //IEnumerable<DataRow>, linq it to death
Этот парень приводит некоторые аргументы относительно HashTable
против DataTable
и этого парня находит Dictionary
лучше, чем DataTable
, но не намного (факторы в Dictionary создают стоимость).
Примечание: если столбцы известны заранее (то есть пользователь может выбрать некоторые столбцы из предопределенного набора столбцов (имя, тип)), я бы выбрал строго типизированные классы, поскольку data [ "property"]
не поддерживает Intellisense, как data.Property
.