Entity framework 实体框架按邮政编码获取客户

Entity framework 实体框架按邮政编码获取客户,entity-framework,Entity Framework,所以我已经通过实体框架5建立了。我在数据库中有一个客户表。什么是获得给定邮政编码客户的最有效方法,例如94023?我有这个: var customersOfLosAltos = (myDbContext.CreateObjectSet<Customer>()).Where(c=>c.Zip == "94023"); var customersOfLosAltos= (myDbContext.CreateObjectSet())。其中(c=>c.Zip==“94023

所以我已经通过实体框架5建立了。我在数据库中有一个客户表。什么是获得给定邮政编码客户的最有效方法,例如94023?我有这个:

var customersOfLosAltos = 
    (myDbContext.CreateObjectSet<Customer>()).Where(c=>c.Zip == "94023");
var customersOfLosAltos=
(myDbContext.CreateObjectSet())。其中(c=>c.Zip==“94023”);
但是,从直觉上看,这似乎效率很低,因为据我所知,它基本上从数据源检索所有客户,然后根据给定的zip进行过滤。如果我只有几百个客户就可以了,如果我有一百万个客户呢

有什么想法吗?谢谢

据我所知,它基本上从数据源中检索所有客户,然后根据给定的zip进行过滤

你的理解是错误的。实体框架将代码转换为SQL查询,因此服务器实际返回的是查询结果

select * from Customer where Zip = '94023'
如果您将代码更改为

var customers = myDbContext.CreateObjectSet<Customer>().ToList();
var customersOfLosAltos= customers.Where(c=>c.Zip == "94023");
SQL server现在执行查询(当您通过
ToList()
或在
foreach
或通过
.AsEnumerable()
等检索结果时)

据我所知,它基本上从数据源中检索所有客户,然后根据给定的zip进行过滤

你的理解是错误的。实体框架将代码转换为SQL查询,因此服务器实际返回的是查询结果

select * from Customer where Zip = '94023'
如果您将代码更改为

var customers = myDbContext.CreateObjectSet<Customer>().ToList();
var customersOfLosAltos= customers.Where(c=>c.Zip == "94023");
SQL server现在执行查询(当您通过
ToList()
或在
foreach
或通过
.AsEnumerable()
等检索结果时)


那么,这只会创建一个查询,不会立即执行?速度将取决于zipcode列是否和如何在数据库中被索引。那么,这只会创建一个查询,不会立即执行?速度将取决于zipcode列是否和如何在数据库中被索引。好的,明白了。这回答了我的问题。谢谢。好的,知道了。这回答了我的问题。谢谢