我正在比较 EF 和类型化数据集的实用性。如果 EF 仅绑定(bind)到 SQL Server,我不明白为什么要在类型化数据集上使用 EF。但是,如果你做了类似的事情,EF 中的 Linq 语句是否会在后期评估:
db.Customers.where(c => c.Name == "John Smith")
EF 将构建一个查询,如:
select * from Customers where Name = 'John smith'
但是对于类型化数据集,您可以这样写:
bll.GetCustomers().where(c => c.Name == "John Smith")
这非常相似,但不同之处在于它首先运行:
select * from Customers
然后使用标准集合库查找包含姓名“John Smith”的行。理论上意味着 EF 会更有效率。
这是正确的吗?
最佳答案
是的。对于 Entity Framework ,它使用 IQueryable<T>
构建您的查询。通过这样做:
var results = db.Customers.Where(c => c.Name == "John Smith");
在内部,结果将是 IQueryable<Customer>
(或您的类型)。这允许提供程序 (EF) 优化内部执行方式。在 SQL Server 的情况下,发送到服务器的实际查询将已经有 SQL WHERE 子句,这反过来意味着您只会从数据库返回单个记录(如果“名称”是唯一的)每条记录。
使用类型化数据集,您将返回每条记录,然后在结果中搜索适当的名称。这可能效率要低得多。
关于c# - 有人可以澄清 Entity Framework 和类型化数据集之间的主要区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3358221/