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

时间:2018-10-10 09:34:25

标签: c# .net .nettiers

我有一张包含13K记录的表和一台旧的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

没有过滤器,并且超时。

有没有一种方法可以加速查询?包括我的过滤器?

1 个答案:

答案 0 :(得分:0)

我个人使用DevExpress网格并使用类似以下内容的方法直接绑定到它们:

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

如果您的过滤器仅会使您从13k下降到10k,并且您将在13k条记录上超时,那么我认为您将需要研究某种形式的分页选项以返回较少的记录。如果启用了SQL2005功能,则内置一些分页功能,但是我从未亲自尝试过它,因此我不知道它的效果如何。默认的Nettiers分页仍然从sql获取所有记录,并在内部进行分页。

就您现有的代码而言,实际上可以达到您的期望。仅当EnablePaging和EnableSorting都设置为false时,.Filter才起作用。您是否尝试过:

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