每当我们想使用IEnumerable扩展方法而不是IQueryable版本时,我们都使用AsEnumerable()方法。
var list = context.Details.AsEnumerable().Where(x => x.Code == "A1").ToList();
为什么DbSet在其他版本可用的情况下默认使用IQueryable版本的方法Like(Where,Select,...)?
答案 0 :(得分:5)
您通常希望使用IQueryable
表单,以便在数据库而不是本地进行过滤。
您获得的代码会将所有记录下载到客户端,并在那里对其进行过滤 - 效率极低。只有当您尝试执行无法在数据库中执行的操作时,您才应该使用AsEnumerable()
- 通常在提供服务器端过滤器之后。 (你可以在服务器上做一个粗略的过滤器,然后在本地做一个更细粒度的过滤器 - 但至少那时你并没有拉所有记录......)
答案 1 :(得分:2)
因为IQuaryable
方法已被实体框架翻译为SQL
。但是IEnumerable
方法不是。所以如果您使用IEnumearable
,则所有数据都将从{DB
获取1}}这并不总是你想要的。