2010-11-16 60 views
1

我有我的asp.net页面上的大型数据集和数据网格。我打算让用户可以过滤原始数据集。什么是最好的方法?我应该使用linq来过滤数据集或继续使用sql,还是有更好的方法使用vb.net与asp.net。SQL过滤,哪种方法最好?

+0

听起来好像你还没有在这里表达额外的需求。 (我不能使用分页)。你为什么不告诉我们你想要做什么。 – 2010-11-16 21:04:21

回答

4

......“这取决于”

你说你是在谈论一个“大数据集”。

如果它真的很大,那么你不应该显示给用户。您还应该考虑将其存储在IIS中可能会降低性能。你想要一个小而快的页面。所以我认为它不好发送每页50多条记录给用户(它总是取决于记录是什么)

你应该考虑创建一些SQL,它允许你在结果中做一些分页,传送那些。如果你想尝试在代码中对其进行分类,那么你可能会在你的客户端获得大量的数据。而sql server的主要目的是对数据进行排序和存储。所以让它做他的工作。您还必须考虑使您缓存的任何数据无效,这可能会成为一个挑战。看看漂亮的LINQ函数,如Skip(30).Take(10)...

另一方面,如果你有一些是静态的,那么你可能会从客户端上兑现它,或一个web服务。

+0

使用IIS会减慢页面的速度? 和我不能使用分页,但是如果我使用json或xml,因为我需要使用数据集执行算术运算,例如有一个运行总计 – MyHeadHurts 2010-11-16 18:18:30

+2

将数据存储在请求之间的IIS内存中将导致您的应用程序无法扩展,因为您可能需要一次为多个用户保存数据。确保你加载测试你的解决方案。而查询的开销并不多。 如果您包含运行总计,那么它是一个完全不同的问题......您询问了有关筛选的信息,只有请求者知道要跳过多少项;) – 2010-11-16 18:25:18

1

什么是最好的方法?

这将是主观的说什么是最好的方式。我可以说的是什么会是一个坏方法:通过应用程序而不是SQL数据库来执行过滤。因此,如果Linq将Linq表示为实体,并且将查询转换为SQL语句,以便过滤由数据库执行,那么就可以。如果你的意思是Linq到对象,那么你正在过滤内存中,为了做到这一点,这意味着你已经将整个数据集加载到内存中,这是坏的。不要将任何东西加载到屏幕上不需要/显示的内存中。

+0

因此,加载页面时加载所有值会更好。因为我的gridview是在一个updatepanel。我可以调用另一个查询并更新gridview。 – MyHeadHurts 2010-11-16 18:07:35

+0

和linq我的意思是使用linq过滤数据集。 – MyHeadHurts 2010-11-16 18:08:26

+0

仅当您要将它们显示在屏幕上时才加载所有值。所以你的意思是Linq的对象。那么,我个人更喜欢这样做的SQL服务器(你也可以启用缓存,以避免太多的数据库)。 – 2010-11-16 18:08:45

0

嗯,我个人认为,如果你已经拥有了内存中的所有数据,在内存中过滤它比在网络上进行过滤要快。因此,你不会有最新的数据更新,除非你刷新它...

但正如Darin Dimitrov所说,如果你还没有所有的数据,你应该只使用一个查询,请求必要的数据。

0

通过回调SQL进行过滤可能很昂贵,例如自动完成样式过滤。 通过调用回缓存数据的Web服务可以实现同样的效果。

如果您有一组用户点击“搜索”的过滤器,那么回调数据库可能是合理的,以避免在Web服务器甚至客户端缓存数据。

如果你有一个繁忙的数据库,那么你可能会回调不同的结果,所以这可以回到调用Web服务。

在这种情况下,我会考虑在没有额外数据库调用的情况下过滤Web服务。这样说,如果你有很多客户端,这可能会杀死一台Web服务器。如果二级过滤器大大减少了数据集,那么为什么要缓存呢?

不幸的是,这样我想答案是没有百达最佳途径......

+0

我的问题是我一直想弄清楚vb.net(asp.net)中的Web服务,我不能。那就是我一直在尝试做的事情http://stackoverflow.com/questions/4169158/json -string-from-vb-net-side-to-asp-net – MyHeadHurts 2010-11-16 18:10:55

+0

如果你能帮我解决这个问题,那就太棒了,我甚至试过了wcf – MyHeadHurts 2010-11-16 18:11:29

+0

@NEWprogrammer:对不起,我是一个数据库猴子... – gbn 2010-11-16 18:12:51