我的asp.net页面上有一个大型数据集和数据网格。我将这样做,以便用户可以过滤原始数据集。什么是最好的方法?我应该使用linq过滤数据集还是继续使用sql,或者使用vb.net与asp.net有更好的方法。
答案 0 :(得分:4)
我认为答案是正确的......“这取决于”
你说你说的是“大数据集”。
如果它真的很大,那么你不应该向用户展示它。您还应该考虑将其存储在IIS中可能会降低性能。你想要一个小而快的页面。所以我认为每页向用户发送超过50条记录并不好(它总是取决于记录是什么)
您应该考虑创建一些SQL,它允许您在结果中进行一些分页,并且只传输它们。如果您想尝试在代码中对其进行排序,那么您可能会在您的客户端获得“大量”数据。而SQL Server的主要目的是对数据进行排序和存储。所以让它完成他的工作。您还必须考虑使您缓存的任何数据无效,这可能本身就是一个挑战。看一下漂亮的LINQ函数,比如Skip(30).Take(10)......
另一方面,如果你有一些是静态的,那么你可能会从在客户端或网络服务上兑现它。
答案 1 :(得分:1)
最好的方法是什么?
说出最好的方法是主观的。我能说的是一个不好的方法:通过应用程序而不是SQL数据库执行过滤。因此,如果Linq你的意思是Linq to Entities,你的查询被翻译成SQL语句,以便过滤由数据库执行,那么就可以了。如果你的意思是Linq to Objects,那么你在内存中进行过滤,为了做到这一点,这意味着你已经将整个数据集加载到BAD的内存中。不要将内容加载到屏幕上永远不需要/显示的内存中。
答案 2 :(得分:0)
好吧,我个人认为如果你已经拥有内存中的所有数据,那么在内存中过滤它比在网络访问中更快。因此,你不会拥有最新的数据更新,除非你刷新它......
但正如Darin Dimitrov所说,如果你还没有所有数据,你应该只使用一个查询,请求必要的数据。
答案 3 :(得分:0)
通过回调SQL进行过滤可能很昂贵,例如自动完成样式过滤。 通过回调到缓存数据的Web服务可以实现相同的效果。
如果您有一组用户点击“搜索”的过滤器,那么回调数据库可能是合理的,以避免在Web服务器甚至客户端缓存数据。
如果您有一个忙碌的数据库,那么您可以回调不同的结果,这样就可以回到调用Web服务了。
在这种情况下,我会考虑在没有额外数据库调用的Web服务中进行过滤。如果你有很多客户端,这可能会导致网络服务器死机。如果辅助过滤器大大减少了数据集,那么为什么要将其缓存呢?
不幸的是,没有最好的方法......