问题标签 [skip-take]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2092 浏览

linq-to-sql - LINQ TO SQL - 跳过/采取未按预期工作

我有一个 IQueryable 存储库(诚然,这是我第一次尝试这个),但我似乎无法使用它来提取正确的数据Skip(1).Take(1)

这是存储库

这是服务

问题是它返回Order By 子句中的FIRST记录,而不是SECOND

谁能告诉我我在这里做错了什么?

0 投票
2 回答
2790 浏览

linq - LINQ skip & take 是否有不错的性能?

我们查询了大约 40 个与客户相关的数据字段。查询通常会返回大量记录,例如多达 20,000 条。我们只想使用前 500 个结果。然后,我们只希望能够一次翻阅 10 个。

LINQ 是否跳过并为此采取合理的方法?使用这种方法与以其他方式手动操作相比,是否存在任何潜在的性能问题?

0 投票
2 回答
737 浏览

linq-to-sql - 计数和跳过时可能对 IEnumerable 进行多次枚举

我正在为 Linq2Sql 中的数据表准备数据

此代码突出显示为“IEnumerable 的可能多重枚举”(在 Resharper 中)

我 100% 确定 Resharper 是对的。

我如何重写它以避免警告

为了澄清,我知道我可以在过滤的末尾放置一个 ToList,只对数据库进行一次查询,例如。

但这会带回比我想通过网络传输的数据多得多的数据。

我期待着我不能吃蛋糕也不能吃。:(

0 投票
2 回答
2267 浏览

entity-framework - 如何检查 IQueryable在尝试 Skip() 和 Take() 之前应用了 OrderBy

我正在尝试构建一个将对查询进行分页的扩展方法。但为了避免异常:System.NotSupportedException 未被用户代码处理 Message=方法“Skip”仅支持 LINQ to Entities 中的排序输入。必须在方法“Skip”之前调用方法“OrderBy”。

我想检查 OrderBy 是否被应用,如果不只是返回查询......像这样的东西:

为了让事情更有趣,我使用 Mycrosoft 的动态表达式 API(又名动态 LINQ),所以我的调用代码看起来像

或者我可以使用像这样的强类型表达式来调用它

这种检查可以吗?我厌倦了使用in 方法签名,但是当您使用 OrderBy(string expression) 时IOrderableQueryable<T>Dynamic Linq 不会返回,因此扩展将不适用...IOrderableQueryable

更新

使用建议(@GertArnold 指出)唯一可行的解​​决方案是检查表达式树。但是,我没有使用整个解决方案,而是ExpressionVisitor通过要求必须在OrderByor之后调用 Paginate 方法来简化我的解决方案OrderByDescending。这允许我只检查表达式树中的当前节点,而不是搜索整个树。所以这就是我所做的:

0 投票
4 回答
7374 浏览

asp.net-mvc - ASP.NET MVC Webgrid 高效分页

我有一个 ASP.NET MVC 4 项目和一个 SQL 视图 (vvItem)。项目控制器

Index.cshtml 视图

在 vvItem 我有近 400000 条记录。我认为 webgrid Pager 只会加载 (Take()) 显示的记录,如果我要转到下一页,它会知道 Skip() 第一个记录。

:如何有效地使视图仅加载显示的记录?

我找到了 2 个解决方案:JSON 版本NerdDinner

我不太擅长 JSON,所以我尝试了 NerdDinner 解决方案。正如我评论的行 //var pageditems = itemqry.Skip(10).Take(20);itemqry 已经加载了所有记录,加载需要很长时间。

Q2:我现在如何进行分页?我需要修改页码。从索引方法。

0 投票
1 回答
1417 浏览

sql-server - 在 SQL Server 和 EF 中采取和跳过

我有一个 ASP.NET MVC 4 应用程序,我正在使用 EF。我有一个表和一个 SQL 视图(视图显示该表中的行加上一些不重要的数据(~ 1000 条记录)),有 ~ 400.000 条记录。当我在 EF 中显示数据时,需要 25 秒

在 SQL Server Management Studio 中,此查询需要 0-1 秒

:为什么 EF 查询这么慢?我应该做一个 SP 来做 Skip and Take 吗?

0 投票
1 回答
7062 浏览

c# - 使用 LINQ to SQL 读取大表:内存不足与分页缓慢

我有一个巨大的表格,我需要按特定顺序阅读并计算一些汇总统计信息。该表已经有一个正确顺序的聚集索引,因此获取记录本身非常快。我正在尝试使用 LINQ to SQL 来简化我需要编写的代码。问题是我不想将所有对象加载到内存中,因为 DataContext 似乎将它们保留在周围——但尝试对它们进行分页会导致可怕的性能问题。

这是故障。最初的尝试是这样的:

这是相当快的,并且以良好的速率流式传输,但问题是应用程序的内存使用量不断增加,从未停止过。我的猜测是 LINQ to SQL 实体被保存在内存中并且没有被正确处理。因此,在创建大量对象 C# 时读取内存不足后,我尝试了以下方法。这似乎是许多人使用的常见Skip/Take范例,具有节省内存的附加功能。

请注意,这_conn是预先创建的,并且会为每个查询创建一个临时数据上下文,从而导致相关实体被垃圾收集。

现在,当我通过数据流式传输时,我有一个理想的行为,即内存使用量根本不会增加。然而,我有一个更糟糕的问题:每个Skip都导致数据加载越来越慢,因为底层查询似乎实际上导致服务器遍历所有先前页面的所有数据。在运行查询时,每个页面的加载时间越来越长,我可以看出这正在变成二次运算。此问题已出现在以下帖子中:

我似乎找不到使用 LINQ 执行此操作的方法,该方法允许我通过分页数据来限制内存使用,但仍然可以在恒定时间内加载每个页面。有没有办法正确地做到这一点?我的直觉是,可能有某种方法可以告诉 DataContext 明确忘记上面第一种方法中的对象,但我不知道该怎么做。

0 投票
2 回答
170 浏览

c# - 如何使 Take() 和 Skip() 模块化?

我有一个这样的结构:

而且主要是我有这个字节数组:

然后我在这个函数中有一个解码函数,我想像这样执行 Take(5) 和 Skip (3):

我如何制作这个模块化,因为我需要与许多可能位置不同的函数相同,无论如何,我可以分配变量来自动计算它而不是使用 Take(3) 或 Skip (5)?

0 投票
3 回答
10124 浏览

c# - Skip(和类似功能,如 Take)的性能

刚刚看了下.NET Framework的Skip/扩展方法的源码(关于类型),发现内部实现是和方法一起工作的:TakeIEnumerable<T>GetEnumerator

假设我有IEnumerable<T>1000 个元素(基础类型是List<T>)。如果我在做 list.Skip(990).Take(10) 会发生什么?它会在取最后 10 个元素之前迭代 990 个第一个元素吗?(这就是我的理解)。如果是,那么我不明白为什么微软没有实现这样的Skip方法:

事实上,他们这样做是为了Count方法,例如......

那么是什么原因呢?

0 投票
1 回答
1250 浏览

c# - 为什么 LinqToEntities Skip/Take oracle 实现这么慢

Context 是 Oracle Database,Entity Framework 5,LinqToEntities,Database First。

我正在尝试在一些大表上实现分页,我的 linqToEntities 查询如下所示:

事实是,取决于我想跳过多少条记录(0 或 16300),它从 0.08 秒到 10.7 秒。

这对我来说似乎很奇怪,所以我检查了生成的 SQL,它是这样的:

我检查了是否真的是 Oracle 通过 SQL Developper 花费了时间,并且确实如此。

然后我检查了执行计划,它出现了:

执行计划

我真正理解的是,对于 row_number 的第一个过滤器没有 STOPKEY,它可能会获取整个子查询。

我真的不知道在哪里看,如果我没记错的话,请求是由 ODT/ODP/.. 生成的,因此,应该针对 Oracle DB 进行优化.. (我自己无法更改) )

也许我的数据库模型已经烂了,我可以添加任何索引或优化以使其更好地工作?