c# - 有人可以澄清 Entity Framework 和类型化数据集之间的主要区别吗?

标签 c# entity-framework strongly-typed-dataset

我正在比较 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/

相关文章:

c# - 使用 C# 将数据表动态转换为类对象

sql - 返回包含博客文本的整个表而不是选择特定列的性能

strongly-typed-dataset - TableAdapter 仅返回选定的列? (VS2008)

c# - Entity Framework 计算属性问题

c# - 使用 MySQL、Entity Framework + Ext.NET 更新记录

c# - 将新行添加到强类型数据集中?

sql-server - 如何从 MS Access 迁移到 SQL Server 2005?

c# - 如何使 HttpResponse.Flush() 异步?

c# - 在 C# 中使用 HttpWebRequest 来模拟curl POST 多部分表单

c# - Linq 或 Lambda 表达式的抽象级别更高