Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataTable对象上运行许多动态SQL查询是否可行_C#_Performance_Datatable_Dataview_Rowfilter - Fatal编程技术网

C# 在DataTable对象上运行许多动态SQL查询是否可行

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

DataTable对象,例如股票(股票代码、部门、价格) 我希望支持动态查询(即编译时未知) 像这样的“类似于'%A'的股票代码,价格>7.50”

我知道DataView.RowFilter支持某种程度的SQL表达式 但问题是每次设置.RowFilter时,DataView都会重建内部索引,这会带来太多的开销

我尝试不查询SQL Server,因为 1) 它是一个小数据集,在运行时变化不大,因此可以存储在内存中 2) 我想评估成千上万个这种自由形式的SQL表达式

我有什么选择?谢谢

更新:

DataTable的Thx jp2code。选择

我还没有验证,但是这个链接
表示构建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。选择,我将更新原始帖子。