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 查询数据集
在使用 LINQ to DataSet 开始查询DataSet对象之前,必须填充DataSet。 有多种方法可将数据加载到其中 DataSet,例如使用 DataAdapter 类或 LINQ to SQL。 将数据加载到对象 DataSet 后,可以开始查询它。 使用 LINQ to DataSet 来进行表述查询类似于对其他启用 LINQ 的数据源使用语言集成查询 (LINQ)。 可以对单个DataSet表或使用标准Join和GroupJoin查询运算符对多个表执行 LINQ 查询。
对类型化对象和非类型 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。