c# - 为什么 IEnumerable.Count() 的上限为 200?

标签 c# .net sql-server linq-to-sql .net-3.5

使用 LINQ to SQL 的 IEnumerable.Count()(或 IQueryable.Count())的行数是否有限制?无论出于何种原因,如果我的查询返回超过 200 条记录,我只能从 IEnumerable.Count() 获得 200 条记录。我什至尝试过使用 IEnumerable.LongCount() (尽管结果的数量不应高到足以需要它)。我还验证了在数据库上调用 COUNT 会返回超过 200 条记录。

我检查了 MSDN 并尝试用谷歌搜索它,但没有成功。

我是不是疯了,或者是我在某处遗漏了什么?我认为这并不是什么大问题(因为程序正在插入正确数量的记录),但如果能够记录传输的记录数量就太好了。

Could we see some sample code?

public IEnumerable<Irms_tx_modify_profile_ban> ExtractNewAdmits()
    {
        var results = from a in _dc.Applications
                      select (Irms_tx_modify_profile_ban)new RMSProfile
                      {
                          //assign column names to property names
                      };

        //Don't know why, but Bad Things happen if you don't put the
        //OfType call here.
        IEnumerable<Irms_tx_modify_profile_ban> narrowed_results = results.OfType<Irms_tx_modify_profile_ban>();
        Program.log.InfoFormat("Read {0} records from Banner.", narrowed_results.Count());
        return narrowed_results;
      }

关于不好的事情发生的评论的原因是由于the issues brought up in this thread 。我刚刚发现,如果我对狭窄的结果(IEnumerable)调用 Count,它会返回正确的金额。如果我在结果上调用它(IQueryable),它只返回 200。我将继续解决 Skeet 的答案(因为他提到了 IQueryable 和 IEnumerable 之间的区别),但如果有人能够解释为什么会发生这种情况,我'我想听听。

最佳答案

我没听说过这样的事情,而且听起来确实很奇怪。

最明显要检查的是正在向数据库发送什么查询。另外,您是否调用 Enumerable.Count() 也很重要。 (即在 IEnumerable<T> 上)或 Queryable.Count() (即在 IQueryable<T> 上)。前者将迭代 .NET 代码中的实际行来检索计数;后者将迭代 .NET 代码中的实际行以检索计数。后者会将计数放入查询中。

我们可以看一些示例代码吗?

编辑:好的,看过代码后:

  • 当您没有调用 OfType 时,它​​正在 SQL 级别执行计数。这应该在 SQL 记录中可见,并且应该可以用任何其他 SQL 工具重现。

  • 我怀疑您实际上没有必须调用OfType。您可以调用 AsEnumerable,或者只是声明 resultsIEnumerable<Irms_tx_modify_profile_ban> 。重要的是变量的类型决定了要使用的扩展方法 - 从而决定了计数的执行位置。

值得注意的是,您当前的解决方案确实效率很低 - 它获取所有数据并对其进行计数,但忽略除计数之外的所有数据。将计数转移到服务器端会更好 - 虽然我知道目前这不起作用,但我确信通过一些分析我们可以使其工作:)

关于c# - 为什么 IEnumerable.Count() 的上限为 200?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/448629/

相关文章:

c# - 在本地机器上设置数据库备份文件

c# - .Net 配置部分中具有相同元素的集合

php - Sql-server:触发器和最后插入的ID

php - 登录系统sqlserver连接错误

.net - 最小化网络图中的交叉线

sql-server - 如何从 InTouch Wonderware 或 SQL Server 2014 调用 SOAP Web 服务

c# - 如何检测文本的字符集?

c# - 无法使用 Entity Framework 和 ASP.NET MVC 从 Models.Class 转换为 DbContext.Class

c# - 有没有办法强制将 Azure CDN 文件作为浏览器附件下载?

c# - 在 .net 中使用 SmtpClient 发送邮件