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 查询提供程序将带有 lambdas 的 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?