LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?

Posted

技术标签:

【中文标题】LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?【英文标题】:Is LINQ to Dataset subset of LINQ to EF or these two are independent? 【发布时间】:2011-01-27 04:13:55 【问题描述】:

【问题讨论】:

【参考方案1】:

他们是独立的。

Linq to Dataset 适用于之前使用 ADO.NET 创建的 DataSet。数据集在使用 linq 之前加载,因此 SQL 查询不是动态构建的。

Linq to EntityFramework 针对实体框架上下文工作。这里的 SQL 查询是根据您提供的 Linq 查询动态构建的。

【讨论】:

【参考方案2】:

Linq 使用 queryProviders 的概念。 查询提供者负责将兰巴表达式转换为对底层数据存储的查询。 正如 Obalix 在我之前所说的那样,Linq to Entities 查询提供程序将带有 lambda 的 linq 转换为使用底层 ado.net 对象执行的真实 sql。看看规范函数here,它们被翻译成sql(并注意哪些不是)。 另一方面,linq to dataset 适用于数据集基础设施。您可能还记得 Data Set 有一些与之关联的查询。 (获取器、更新、删除、插入)与 DataAdapters 对象的使用。 Linq 查询映射到数据集中已经存在的对象 = 表、列等。没有构建 SQL 查询,因为提供程序不在如此低的级别上运行 - 数据集是它使用的数据抽象。

如果你不关心数据库不可知论,你可以看看 linq to SQL,如果我没听错的话,甚至还有一些供应商 linq to Oracle。

【讨论】:

【参考方案3】:

他们是独立的,甚至不能很好地合作。

LINQ-to-Datatsets 是一组扩展方法,允许基于 IEnumerable 对已加载到 DataTables 中的数据进行 LINQ 查询。它接近于查询 List 和其他集合。

LINQ-to-Entities 使用查询提供程序和 IQueryable 将 LINQ 查询转换为 SQL 查询。它还提供将数据库表建模为对象。

如果您使用 EF,您可以编写(更多)面向对象,使用 DataSets 仍然是面向数据库的。

【讨论】:

以上是关于LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Dataset 是 LINQ to EF 的子集还是这两者是独立的?

Linq to SQL 还是 Linq to DataSet?

LINQ to DataSet

LinQ To DataSet

LINQ系列:LINQ to DataSet的DataTable操作

泛型 Field 和 SetField 方法 (LINQ to DataSet)