【问题标题】:"Count()" after "Take()" on "IQueryable" returns wrong result?“IQueryable”上的“Take()”之后的“Count()”返回错误结果?
【发布时间】:2016-11-30 07:19:30
【问题描述】:

在IQueriable数据(初始计数m)上执行take(n) linq 方法后,方法Count() 仍然返回m 值。

执行ToList() 命令是从IQueryable获取实际计数的唯一选项吗?

var data = service.Get();//100 records
var data2 = data.Take(10);

var count = data2.count(); //result 100 - wrong
var count2 = data2.ToList().Count; // result 10 - correct

【问题讨论】:

  • 你能展示你的代码吗?
  • 那么,你的代码在哪里?
  • “仍然返回 m 值”是什么意思? IQueriable.Take() 不会像“从 cookie 罐中取出 cookie”那样从初始 IQueriable 中取出对象。
  • 这是查询提供程序中的错误(或不受支持的功能)。没什么可做的,除了要求查询提供者修复它,或者避免这种情况。
  • LINQ 调用没有任何问题,但是 NHibernate 生成的 SQL 可能不会按照您的想法执行。检查每个调用实际生成的查询

标签: c# linq nhibernate iqueryable


【解决方案1】:

对于这种情况,您必须使用 ToList(),或者找到替代解决方案,或者自己限制 Count() 的结果(因为正确的值永远不会大于 Take() 指定的值)。

NHibernate 中的已知错误: https://nhibernate.jira.com/browse/NH-2477

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 2019-10-20
    • 2019-10-07
    • 2015-12-30
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多