【发布时间】:2010-10-01 17:00:16
【问题描述】:
IEnumerable.Count()(或 IQueryable.Count())使用 LINQ to SQL 的行数是否有限制?无论出于何种原因,如果我的查询返回超过 200 条记录,我只能从 IEnumerable.Count() 获得 200 条记录。我什至尝试过使用 IEnumerable.LongCount() (即使结果的数量不应该高到需要它)。我还验证了在数据库上调用 COUNT 会返回超过 200 条记录。
我检查了 MSDN 并尝试用谷歌搜索它,但无济于事。
我是不是疯了,还是我在某处遗漏了什么?我想这没什么大不了的(因为程序正在插入正确数量的记录),但是能够记录传输的记录数量会很好。
我们可以看看一些示例代码吗?
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。我刚刚发现的是,如果我在 narrowed_results (IEnumerable) 上调用 Count,它会返回正确的数量。如果我在结果(IQueryable)上调用它,它只返回 200。我会继续解决 Skeet 的答案(因为他提到了 IQueryable 和 IEnumerable 之间的区别),但是如果有人能够解释为什么会发生这种情况,我'很想听。
【问题讨论】:
-
将 _dc.Log 分配给某个东西,这样您就可以看到正在生成什么 SQL。 AsEnumerable.Count 将导致查询执行,并且计数将对加载到内存中的结果进行操作。在 IQueryable 上执行它会导致计数被转换到服务器......
标签: c# .net sql-server linq-to-sql .net-3.5