开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
failed to start lsb:bring up/down
centos 7 有的时候重启网络报错,failed to start lsb:bring up/down 解决方法: systemctl stop NetworkManager
14 0
start 与 run 区别
start 与 run 区别
38 0
do-while循环的与for循环,while循环的区别
do-while循环的与for循环,while循环的区别
83 0
http://blog.csdn.net/cymm_liu/article/details/8582008
1、Xserver 很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.
1013 0
Linq联表查询
var lambda=_db.Accounts.Join(_db.AccSubTypes,ac=>ac.Invoice,ast=>ast.Astid,(ac,ast)=>new {ac,ast}) .
684 0
【HBase】start master 与 start master --backup 的区别
   我们都知道hbase 集群中通常有一个master 节点,多个region server节点,为了防止HBase 集群中master的单点故障,可以向集群中添加一个slave master,这些新添加的master 会分布在不同的物理机器上,因此以最坏的情...
699 0
Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单。所以写的没多少技术含量。把这些技术总结出来,然后一简单的方式让更多的人很好的接受这是我一直努力的方向。
909 0
winform 与asp.net 下拉列表的区别
  asp.net的下拉列表绑定后还可以添加新项,用add()方法和insert()方法都行,用insert()还可以把你要添加的项添加到指定的地方 winform绑定后就不能修改了 另外还有一点是关于js的 Javascript获取select的选中值和选中文本 var obj = document.
813 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载