LINQ中IEnumerable和IQueryable“Where”子句之间的区别

时间:2012-09-19 15:19:23

标签: 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>();
    }

1 个答案:

答案 0 :(得分:5)

FindBy将从数据库中获取所有 T个对象,并在枚举结果时将其过滤到程序的内存中。

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