我想从数据库中获取数据,以便在页面上显示。表中有大量的行,所以我使用页面来避免永远滚动。
我有搜索单词的功能(没有特定列),按任何列排序,显然会更改页面大小以及我所在的页面。
理论上,我可以向数据库询问所有内容(SELECT * FROM myTable),将其发送到我的html视图,并完全在javascript中处理数据。问题是,有太多的数据,使用我的结构(页面控制器调用我的主逻辑,它调用一个调用数据库的web服务),这是非常慢的,有时候等待最多20秒的页面原始负载。加载后,javascript通常很快。或者,我可以使用Linq在控制器中完成大部分工作。我也可以在网络服务(它是我的)中完成工作,仍然在Linq。或者,我可以立即使用WHERE,ORDER BY,COUNT和一堆动态SQL请求,以便我立即得到我想要的数据库。但是,每当其中一个参数发生变化时,任何一个都会强迫我刷新页面。
所以我对性能感到疑惑。例如,在以下之间更快:
var listObjects = ExecuteSQL("SELECT * FROM myTable");
return listObjects.Where(x => x.field == word).OrderBy(x => x.field);
和
var listObjects = ExecuteSQL("SELECT * FROM myTable WHERE field = :param1 ORDER BY field", word);
return listObjects;
在具体的情况下,使用我提到的不同方法会更好还是更差?
答案 0 :(得分:1)
没有
您希望在 dataserver 上选择数据的块(pagefull)。这是它的工作;它知道如何做到最好。
所以,忘记ExecuteSQL
。你几乎关闭了一切能够帮助你的能力。试试LINQ:
var page = (from m in MyTable
where m.field == param1
orderby m.field
select m)
.Skip((nPage-1)*pageLength).Take(pageLength);
这将生成确切的SQL,告诉数据服务器只返回您想要的行。