为什么DbSet <t> .Where()默认使用IQueryable版本?

ram*_*_rp 2 c# linq ienumerable iqueryable ef-code-first

每当我们想使用IEnumerable扩展方法而不是IQueryable版本时,我们都使用AsEnumerable()方法.

var list = context.Details.AsEnumerable().Where(x => x.Code == "A1").ToList();
Run Code Online (Sandbox Code Playgroud)

为什么DbSet使用IQueryable版本的方法默认情况下,其他版本可用时(Where,Select,...)?

Jon*_*eet 5

您通常希望使用该IQueryable表单,以便在数据库而不是本地进行过滤.

您获得的代码将所有记录下载到客户端,并在那里过滤 - 这是非常低效的.您应该只AsEnumerable()在尝试执行无法在数据库中执行的操作时使用 - 通常在提供服务器端筛选器之后.(你可以在服务器上做一个粗略的过滤器,然后在本地做一个更细粒度的过滤器 - 但至少你没有拉动所有记录......)