LINQ中IEnumable和IQueryable"Where"子句之间的区别

c83*_*830 2 c# linq-to-entities entity-framework-4.1

我对下面的FindBy和FindByExp函数的底层机制有点困惑.我知道FindyByExp将在数据库端执行谓词.但是FindBy函数怎么样?它是否从数据库获取所有对象并首先将它们加载到内存中,然后执行谓词?

    public IQueryable<T> FindBy(Func<T, bool> predicate)
    {
        return context.Get<T>().Where(predicate).AsQueryable<T>();
    }

    public IQueryable<T> FindByExp(Expression<Func<T, bool>> predicate)
    {
        return context.Get<T>().Where(predicate).AsQueryable<T>();
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 5

FindBy当您枚举结果时,将获取数据库中的所有 T对象并在程序的内存中过滤它们.

FindByExp 将更改在数据库服务器上执行的查询并添加where子句.