C# 在DataTable对象上运行许多动态SQL查询是否可行
DataTable对象,例如股票(股票代码、部门、价格) 我希望支持动态查询(即编译时未知) 像这样的“类似于'%A'的股票代码,价格>7.50” 我知道DataView.RowFilter支持某种程度的SQL表达式 但问题是每次设置.RowFilter时,DataView都会重建内部索引,这会带来太多的开销 我尝试不查询SQL Server,因为 1) 它是一个小数据集,在运行时变化不大,因此可以存储在内存中 2) 我想评估成千上万个这种自由形式的SQL表达式 我有什么选择?谢谢 更新: DataTable的Thx jp2code。选择 我还没有验证,但是这个链接C# 在DataTable对象上运行许多动态SQL查询是否可行,c#,performance,datatable,dataview,rowfilter,C#,Performance,Datatable,Dataview,Rowfilter,DataTable对象,例如股票(股票代码、部门、价格) 我希望支持动态查询(即编译时未知) 像这样的“类似于'%A'的股票代码,价格>7.50” 我知道DataView.RowFilter支持某种程度的SQL表达式 但问题是每次设置.RowFilter时,DataView都会重建内部索引,这会带来太多的开销 我尝试不查询SQL Server,因为 1) 它是一个小数据集,在运行时变化不大,因此可以存储在内存中 2) 我想评估成千上万个这种自由形式的SQL表达式 我有什么选择?谢谢 更新: Da
表示构建DataView将创建一个似乎对DataTable有积极影响的索引。选择,因此我将只在DataTable对象中存储所有数据,并为查询中涉及的每个列创建一个DataView。调用下面的GetData(table)一次,然后每隔一次调用重载GetData(表,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;
}
私有数据表m_表;
公共数据表GetData(字符串sqlCmd)
{
DataTable=新的DataTable();
返回表;
}
公共DataTable GetData(DataTable表,字符串sqlFilter)
{
如果(!String.IsNullOrEmpty(sqlFilter))
{
var copy=table.Clone();
foreach(表中的数据行。选择(sqlFilter))
{
var newRow=copy.newRow();
for(int i=0;i
可能还有其他方法,但这应该会让你开始。jp2code,非常感谢!提醒我DataTable。选择,我将更新原始帖子。