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

本文关键字:是否 查询 SQL 动态 对象 DataTable 运行 许多 | 更新日期: 2023-09-27 17:50:24

一个数据表对象,例如Stocks(股票,板块,价格)我想支持动态查询(即在编译时不知道)就像这个"股票价格像'%A'和价格>7.50 "

我理解DataView。RowFilter支持一定程度的SQL表达式但问题是每次你设置。rowfilter, DataView重建内部索引,这是太多的开销

我尽量不查询SQL Server,因为1)它是一个小数据集,在运行时不会改变太多,因此可以在内存中2)我想评估成千上万的这些自由形式的SQL表达式

我有什么选择?谢谢!

更新:

Thx jp2code for DataTable。选择

我还没有验证,但是这个链接http://www.codeproject.com/Tips/807941/DataTable-Select-is-Slow
说,建立一个DataView将创建一个索引,这似乎对DataTable有利。选择,因此我将把所有数据存储在一个DataTable对象中,并为查询中涉及的每个列创建一个DataView。

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

调用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;
    }

也许还有其他的方法,但这应该是你的开始。