【问题标题】:Which is the better approach for filtering?哪种过滤方法更好?
【发布时间】:2013-09-12 11:46:17
【问题描述】:

我有一个包含文本框、搜索按钮和网格视图的 ASP.net 页面。

最初页面将加载所有绑定到网格的记录。在这里,用户还有一个选项,他可以通过在文本框中输入 id 值来过滤网格记录。

因为,在页面加载时,我将网格与所有记录绑定在一起。当用户在文本框中输入过滤条件时,我正在使用 linq 查询对其进行过滤。

我的网格有大约 28,000 条记录。

在这里,我的问题是遵循哪种方法。一种方法是将 id 传递给数据库并获取结果,或者仅通过查询已经可用的数据集。

我正在使用 LINQ 方法,这似乎需要更多时间。还是只是我的错觉?

这两种方法有什么区别吗?如果有,哪个有效?

请澄清一下。我使用的 LINQ 查询是:

Var query = from myrow in dtItems.AsEnumerable()
                        where myrow.Field<string>("ID") ==txtID.Text
                        select myrow;

【问题讨论】:

  • 你不能衡量什么对你更有效吗?

标签: c# asp.net sql linq gridview


【解决方案1】:
Var query = from myrow in dtItems.AsEnumerable()
                        where myrow.Field<string>("ID") ==txtID.Text
                        select myrow;

使用AsEnumerable 表示所有记录都已加载,过滤器应用于内存集合。

如果您只是省略 AsEnumerable,您应该得到一个 Queryable,并且在 SQL 中应用了 where,因此您只加载匹配的行。

但是,如果您确定内存中已经有项目,那么查询它们应该比调用数据库更快...您需要分析代码并查看哪个最有效。

【讨论】:

  • 除非你有理由添加 AsEnumerable 我会说这是一个不必要的步骤。它会投射您的收藏,因此会增加开销(如果只是少量的话)。
  • 所以我可能需要查看更多代码才能了解发生了什么。也许试试 AsQueryable()..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2012-02-08
  • 2011-12-12
  • 2012-08-02
  • 1970-01-01
相关资源
最近更新 更多