实体框架 - 表达式与Func

时间:2017-09-21 17:09:44

标签: c# entity-framework expression

考虑这两个代码:

使用 Func<T, bool>

public IQueryable<Blog> GetBlogs(Func<Blog, bool> predicate)
{
   return context.Blogs.Where(predicate).AsQueryable();
}

使用 Expression<Func<T, bool>>

public IQueryable<Blog> GetBlogs(Expression<Func<Blog, bool>> predicate)
{
   return context.Blogs.Where(predicate); // No need of AsQueryable
}

因此,在第一种情况下,实体框架将始终返回数据库中的所有对象,对吧?那么调用AsQueryable有什么意义呢?无论如何它有帮助吗?它类似于Expression版本?

1 个答案:

答案 0 :(得分:5)

  

无论如何都有帮助吗?

没有

所有这一切都取决于方法的调用者,因为他们认为他们有一个IQueryable,它会将应用于它的任何其他运算符转换为在数据库中运行的SQL ,实际上你只穿了一件IEnumerable的羊皮衣服。如果你真的想要要在内存中而不是在数据库中执行的操作,那么至少要明确它,请将IEnumerable键入为IEnumerable