一个DataTable对象,比如股票(Ticker,Sector,Price) 我想支持动态查询(即在编译时不知道) 像这样的“Ticker喜欢'%A',价格> 7.50”
我理解DataView.RowFilter支持某种程度的SQL表达式 但问题是你每次设置.RowFilter时,DataView都会重建内部索引,而且开销太大了
我尝试不查询SQL Server,因为 1)它是一个小数据集,在运行时没有太大变化,因此可以在内存中 2)我想评估成千上万的这些自由格式的SQL表达式
我有哪些选择?谢谢!
更新
DataTable.Select的Thx jp2code
我尚未验证,但此链接http://www.codeproject.com/Tips/807941/DataTable-Select-is-Slow
说构建一个DataView会创建一个似乎对DataTable.Select产生有利影响的索引,所以我只将所有数据存储在一个DataTable对象中,并为每个将参与查询的列创建一个DataView。
答案 0 :(得分:0)
在下面调用 GetData(table),然后每隔一次调用重载 GetData(table,sqlFilter):
private DataTable m_table;
public DataTable GetData(string sqlCmd)
{
DataTable table = new DataTable();
return table;
}
public DataTable GetData(DataTable table, string sqlFilter)
{
if (!String.IsNullOrEmpty(sqlFilter))
{
var copy = table.Clone();
foreach (DataRow row in table.Select(sqlFilter))
{
var newRow = copy.NewRow();
for (int i = 0; i < row.ItemArray.Length; i++)
{
newRow[i] = row.ItemArray[i];
}
copy.Rows.Add(newRow);
}
return copy;
}
return table;
}
可能还有其他方法,但这应该让你开始。