LINQ to DataSet查询详解

简介:

这里介绍使用LINQ to DataSet查询数据,其功能主要是通过System.Data.DataRowExtions和System.Data.DataTableExtensions两个静态类中的扩展方法来公开的。
在向大家详细介绍LINQ to DataSet查询之前,首先让大家了解下LINQ to DataSet主要是提供对离线数据的支持,然后全面介绍LINQ to DataSet查询。
LINQ to DataSet主要是提供对离线数据的支持,只有在填充DataSet之后,我们才能使用LINQ to DataSet查询数据。其功能主要是通过System.Data.DataRowExtions和System.Data.DataTableExtensions两个静态类中的扩展方法来公开的。LINQ to DataSet是LINQ to ADO.Net中的一部分,但这部分所占比重非常小,内容也比较少。
下面就让我们首先来看看DataTableExtensions中的扩展方法:
public static EnumerableRowCollection<DataRow> AsEnumerable(this DataTable source)     public static DataView AsDataView(this DataTable table)   public static DataView AsDataView<T>(this EnumerableRowCollection<T> source) where T : DataRow     public static DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow   public static void CopyToDataTable<T>(this IEnumerable<T> source,DataTable table,LoadOption options) where T : DataRow   public static void CopyToDataTable<T>(this IEnumerable<T> source,DataTable table,LoadOption options,FillErrorEventHandler errorHandler)where T : DataRow 
从定义中就可以看出这三类主要是提供DataTable、DataView和IEnumerable三者之间的转换。大家都知道LINQ to Object查询主要是对IEnumerable序列进行的操作,这样就使得DataTable、DataView和LINQ之间建立了一个转换桥梁。
因此,在我们需要将DataTable应用于LINQ to DataSet查询是要先调用AsEnumerable完成DataTable到LINQ的转换。如果我们需要将LINQ to DataSet查询的结果进行数据绑定时我们需要调用AsDataView的泛型版来完成LINQ到DataView的转换。当然我们也可以使用CopyToDataTable来进行LINQ到DataTable的转换。
注意:如果在我们完成了DataTable到LINQ(IEnumerable) 的转换之后(也就是调用AsEnumerable扩展方法),需要进行两个DataRow序列的集合操作如 Distinct,Union,Except,Intersect,SequenceEqual,这些操作都需要对数据源中的元素进行相等比较,由于缺省情况下都是调用数据源中的元素的GetHashCode和Equals操作来判断的,对于DataRow而言就是判断对象的引用是否相等,这样可能会导致我们不期望的结果(DataRow里面的数据内容是相同的,但不是同一个对象),所以我们要使用 Distinct,Union,Except,Intersect,SequenceEqual带IEqualityComparer的重载版本,使用 System.Data.DataRowComparer.Default作为参数。这个比较器类是.Net3.5专门为LINQ to DataSet新增加的,用于比较DataRow的值的,它是通过先比较DataColumn的数量,然后使用该列中类型的Equals方法进行比较。

不带LoadOptions参数的CopyToDataTable方法将自动为每一行的每一个字段创建(更新)原始版本和当前版本,带有 LoadOptions参数的CopyToDataTable重载版本可以让你指定是创建(更新)原始版本或是当前版本,或者两者都填充。 LoadOptions选项有下面三个选项值可以选择:◆OverwriteChanges: 创建(更新)每一列的当前值和原始值◆PreserveChanges: 创建(更新)每一列的原始值◆Upset: 创建(更新)每一列的当前值



   本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360587,如需转载请自行联系原作者





相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
开发框架 .NET 大数据
C#使用linq查询大数据集的方法
这篇文章主要介绍了C#使用linq查询大数据集的方法,涉及C#调用linq进行数据查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
2120 0
|
SQL 开发框架 .NET
Linq To DataSet总结
Linq To DataSet总结
157 0
|
.NET 开发框架 存储
|
机器学习/深度学习 .NET
|
.NET 开发框架 数据库
深入调研Linq to Objects Join Linq to Entity
最近工作中遇到数据库组合查询带来的一些问题,因此有必要调研一下Linq to Objects Join Linq to Entity。参考一些网友的代码案例,深入实践了一下使用EntityFramework Code First 下的组合查询。
1221 0