【问题标题】:Difference on .Count() in IQueryable and IEnumerableIQueryable 和 IEnumerable 中 .Count() 的区别
【发布时间】:2013-03-11 15:04:06
【问题描述】:

我有我要传递给函数的对象列表,我想在里面计算它们。 当我使用 IQueryable() 时,它不会正确计算它们,但是当我使用 IEnumerable() 时,它会计算它们。

public int functCount(IQueryable<MyObject> myLisfOfObjects)  
{
    int numberOfItems = myListOfObjects.Count(o => o.isSet); //isSet is bool property in my object
    return numberOfItem;
}

第一次调用它返回正确数量的项目,但是当我更改列表中某些元素的 isSet 属性时,它返回与第一次调用相同的数字。

public int functCount(IEnumerable<MyObject> myLisfOfObjects)  
    {
        int numberOfItems = myListOfObjects.Count(o => o.isSet); //isSet is bool property in my object
        return numberOfItem;
    }

但是当我将代码更改为此时,它每次都会返回正确的计数。

谁能解释一下区别,为什么会这样?

【问题讨论】:

  • 你能不能说明你是怎么称呼它们的,改变它们的值并召回它们,好吗?仅凭给定的代码很难说。

标签: c# linq entity-framework


【解决方案1】:

由于您传递给其中任何一个函数的任何内容都不会导致编译错误,因此可以安全地假设它是IQueryable。这意味着.Count() 将作为 SQL 语句重新评估并针对数据库运行(忽略您认为在内存中所做的任何更改)。 但是,在 IEnumerable 上调用 .Count() 会调用完全不同的方法,它只会返回内存中集合的计数。

换句话说,IEnumerable&lt;T&gt;.Count()IQueryable&lt;T&gt;.Count() 是两种完全不同的方法,做不同的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多