EntityDataSet获取所有数据,然后应用where子句



我正在使用asp.net GridView控件,并将DatasourceId设置为EntityDataSource,如下所示页面加载将GridDataSource.EntityTypeFilter设置为视图名称,并添加where子句作为GridDataSource。where=sWhereClause

View有一百万条记录,但Where条件会筛选出该记录。EntityDataSource首先在Sub Query中获取所有一百万记录,然后应用Where which timing out命令。其生成如下所示的查询。我希望where子句应该与ViewName select语句本身一起使用,而不是与子查询表Extent1一起使用。

SELECT TOP (20) 
[Filter1].[COL1],
[Filter1].[COL2]
[Filter1].[Col3] 
FROM ( 
SELECT [Extent1].[COL1] , [Extent1].[COL2], [Extent1].[COL3]
, row_number() OVER (ORDER BY [Extent1].[COL1] ASC
) AS [row_number]
FROM 
(
SELECT 
ViewName.V1 , 
ViewName.V2
ViewName.V3
ViewName.V4
FROM [dbo].ViewName
)
AS [Extent1]

WHERE ([Extent1].[COL1] LIKE '%FilterValue%') 
OR ([Extent1].[COL1] LIKE '%FilterValue%') OR ([Extent1].[COL2] LIKE '%FilterValue%') OR ([Extent1].[COL3] LIKE '%FilterValue%') )
)  AS [Filter1]
WHERE [Filter1].[row_number] > 0
ORDER BY [Filter1].COL1] ASC

感谢并感谢您提前提供的帮助。

EntityDataSource首先在子查询中获取所有百万条记录,然后应用Where which timing out命令

仅仅因为WHERE子句不在子查询中并不意味着子查询没有被筛选。SQL Server(假设您正在使用(可以将WHERE子句谓词"下推"到子查询中,以及视图定义中的基表中。

但这在这里没有任何区别,因为必须为视图输出中的每一行评估多个LIKE谓词,然后必须对所有行进行排序才能找到前20行。

相关内容

  • 没有找到相关文章

最新更新