LINQ to DataSet 概述
更新:November 2007
DataSet 是更为广泛使用的 ADO.NET 组件之一。 它是 ADO.NET 所基于的断开连接式编程模型的关键元素,使用它可以显式缓存不同数据源中的数据。 在表示层上,DataSet 与 GUI 控件紧密集成,以进行数据绑定。 在中间层上,它提供保留数据关系形状的缓存并包括快速简单查询和层次结构导航服务。 用于减少对数据库的请求数的常用技术是使用 DataSet 以便在中间层进行缓存。 例如,考虑数据驱动的 ASP.NET Web 应用程序。 通常,应用程序的绝大部分数据不会经常更改,属于会话之间或用户之间的公共数据。 此数据可以保存在 Web 服务器的内存中,这会减少对数据库的请求数并加速用户的交互。 DataSet 的另一个有用特征是允许应用程序将数据子集从一个或多个数据源导入应用程序空间。 然后,应用程序可以在内存中操作这些数据,同时保留其关系形状。
DataSet 虽然具有突出的优点,但其查询功能也存在限制。 Select 方法可用于筛选和排序,GetChildRows 和 GetParentRow 方法可用于层次结构导航。 但对于更复杂的情况,开发人员必须编写自定义查询。 这会使应用程序性能低下并且难以维护。
使用 LINQ to DataSet 可以更快更容易地查询在 DataSet 对象中缓存的数据。 这些查询用编程语言本身表示,而不表示为嵌入在应用程序代码中的字符串。 这意味着开发人员不必学习单独的查询语言。 此外,LINQ to DataSet 可使 Visual Studio 开发人员的工作效率更高,因为 Visual Studio IDE 提供编译时语法检查、静态类型化和对 LINQ 的 IntelliSense 支持。 LINQ to DataSet 也可用于查询从一个或多个数据源合并的数据。 这可以使许多需要灵活表示和处理数据的方案能够实现。 具体地说,一般报告、分析和业务智能应用程序将需要这种操作方法。
使用 LINQ to DataSet 查询数据集
只有在填充 DataSet 后,您才能开始使用 LINQ to DataSet 来查询 DataSet 对象。 向 DataSet 中加载数据有多种方法,如使用 DataAdapter 类或 LINQ to SQL。 将数据加载到 DataSet 对象后,可以开始查询数据。 使用 LINQ to DataSet 来表述查询类似于对其他启用 LINQ 的数据源使用语言集成查询 (LINQ)。LINQ 查询可以对 DataSet 中的单个表执行,也可以通过使用 Join 和 GroupJoin 标准查询运算符对多个表执行。
支持对类型化和非类型化 DataSet 对象执行 LINQ 查询。 如果在应用程序设计时已知 DataSet 的架构,则建议使用类型化 DataSet。 在类型化 DataSet 中,表和行对每个列都具有类型化成员,从而使查询更简单并且更具可读性。
除了 System.Core.dll 中实现的标准查询运算符外,LINQ to DataSet 还添加了多种 DataSet 特定扩展,从而可以更容易地查询一组 DataRow 对象。 这些 DataSet 特定扩展包括用于比较行序列的运算符以及用于访问 DataRow 的列值的方法。
N 层应用程序和 LINQ to DataSet
N 层数据应用程序是以数据为中心的应用程序,分为多个逻辑层(或层)。 典型的 N 层应用程序包括一个表示层、一个中间层和一个数据层。 将应用程序组件分离到不同的层可提高应用程序的可维护性和可伸缩性。 有关 N 层数据应用程序的更多信息,请参见 N 层数据应用程序。
在 N 层应用程序中,DataSet 通常用于中间层以缓存 Web 应用程序的信息。 LINQ to DataSet 查询功能通过扩展方法实现,并扩展现有的 ADO.NET 2.0 DataSet。
下面的关系图演示 LINQ to DataSet 如何与 DataSet 相关并适应 N 层应用程序: