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



我对下面的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>();
    }

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

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

最新更新