使用 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,或者只是声明
results
如IEnumerable<Irms_tx_modify_profile_ban>
。重要的是变量的类型决定了要使用的扩展方法 - 从而决定了计数的执行位置。
值得注意的是,您当前的解决方案确实效率很低 - 它获取所有数据并对其进行计数,但忽略除计数之外的所有数据。将计数转移到服务器端会更好 - 虽然我知道目前这不起作用,但我确信通过一些分析我们可以使其工作:)
关于c# - 为什么 IEnumerable.Count() 的上限为 200?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/448629/