.nettiers 数据源不对查询应用过滤器

.nettiers datasource does not apply filter on query

我有一台有 13K 条记录的 table 和一台有点旧的 sql 机器。

在有问题的页面中,我有一个 netTiers 数据源,该数据源超时。 我的问题是在 page_load 我设置了过滤器: vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'"; 将结果数从 13K 更改为 10。 但我看到生成查询是:

                BEGIN

                SELECT * FROM [dbo].[vwImmobileCommessaAttivo] 
                ORDER BY [CommessaId]

                -- get total count
                SELECT @@ROWCOUNT AS TotalRowCount;

                END

没有过滤器,超时。

有加速查询的方法吗?包括我的过滤器?

我个人使用 DevExpress 网格并使用如下方式直接绑定到它们:

grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();

如果您的过滤器只会将您从 13k 减少到 10k,而您在 13k 条记录时超时,那么我认为您将需要研究某种形式的分页选项以减少 return记录。如果你开启了SQL2005的特性,它会内置一些分页,但我从来没有亲自尝试过,所以我不知道它的效果如何。默认的 Nettiers 分页仍然从 sql 获取所有记录并在内部进行分页。

就您现有的代码而言,它确实在做您期望的事情。 .Filter 只有在 EnablePaging 和 EnableSorting 都设置为 false 时才有效。你有没有试过:

vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";