我有大约100,000行通用数据.此数据的列/属性是用户可定义的,并且是常用的数据类型(字符串,整数,双精度,日期).将有大约50列/属性.
我有2个需求:
能够使用表达式计算新列/属性,
例如Column3 = Column1*Column2.
最终我希望能够使用回调来使用外部数据,
例如Column3 = Column1*GetTemperature
表达式相对简单,数学运算,求和,计数和IF是唯一必需的函数.
能够过滤/分组数据并执行聚合, 基于以上所述,我认为GenericList方法会获胜,但我没有考虑的是性能,由于某些原因,我认为使用数据表会更好. 非常感谢任何见解.谢谢.
例如Sum(Data.Column1)Where(Data.Column2 =="blah")
据我所知,我有两个选择:
1.使用DataTable.
=>上面的第1点是通过使用DataColumn实现的
.Expression =>上面的第2点是通过使用DataTable.DefaultView.RowFilter或DataTable.Select()和C#代码实现的
.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
有没有人对LINQ vs. DataTable性能有直觉感受/经验?
NCalc怎么样?
正如我所说,大约有100,000行数据,有50列,其中可能有20列.总共将对数据运行大约50条规则,因此总共将有500万行/对象扫描.
PS.当然使用数据库+ SQL和Views等将是最简单的解决方案,但由于各种原因无法实现.
bottlenecked.. 5
好吧,使用DataTable并不排除使用LINQ
table.Rows.Cast() //IEnumerable , linq it to death
这个家伙提出了一些关于HashTable
vs.的争论,DataTable
而这个家伙发现的Dictionary
好多了DataTable
,但不是很多(字典中的因素创造成本).
注意:如果预先知道列(也就是说,用户可以从预定义的一组列(名称,类型)中选择一些列),我会使用强类型类,因为data["property"]
不会像我data.Property
那样获得Intellisense支持.
好吧,使用DataTable并不排除使用LINQ
table.Rows.Cast() //IEnumerable , linq it to death
这个家伙提出了一些关于HashTable
vs.的争论,DataTable
而这个家伙发现的Dictionary
好多了DataTable
,但不是很多(字典中的因素创造成本).
注意:如果预先知道列(也就是说,用户可以从预定义的一组列(名称,类型)中选择一些列),我会使用强类型类,因为data["property"]
不会像我data.Property
那样获得Intellisense支持.