我有一个SQL查询,可以通过DataReader带回大量的行。刚才我查询DB将结果集转换为List(of),数据将Grid绑定到List。
由于数据集的大小,偶尔会导致超时。
我目前有三个teir设置,其中UI作用于业务层中的对象列表。
有人能建议在这个场景中实现延迟加载的最佳方法吗?还是有其他方式干净地实现这个?
我目前正在使用Visual Studio 2005,.NET 2.0
编辑:在这种情况下如何使用分页?
答案 0 :(得分:1)
LINQ to SQL似乎在您的情况下有意义。
否则,如果出于任何原因,您不想使用LINQ to SQL(例如,您使用的是.NET 2.0),请考虑编写一个读取DataReader
并将其转换为适当对象的迭代器: / p>
IEnumerator<MyObject> ReadDataReader() {
while(reader.MoveNext())
yield return FetchObject(reader);
}
答案 1 :(得分:0)
您是否需要立即恢复所有数据?你可以考虑分页。
答案 2 :(得分:0)
分页可能是您最好的解决方案。如果您使用的是SQL Server 2005或更高版本,则会添加新功能。 ROWNUMBER():
WITH MyThings AS
(
SELECT ThingID, DateEntered,
ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
FROM dbo.Things
)
SELECT *
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;
David Hayden有一个example,它非常有助于演示SQL。
此方法会减少返回的记录数,从而减少总体加载时间。这意味着你需要做更多的事情来追踪你在记录序列中的位置,但这是值得的。 标准分页技术要求所有内容都从数据库返回,然后在中间层或客户端层(代码隐藏)进行过滤,此方法将记录减少到更易于管理的子集。