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中的扩展方法:

  1. public static EnumerableRowCollection<DataRow> 
    AsEnumerable(this DataTable source)  
  2.  
  3. public static DataView AsDataView(this DataTable table)  
  4. public static DataView AsDataView<T>
    (this EnumerableRowCollection<T> source) where T : DataRow  
  5.  
  6. public static DataTable CopyToDataTable<T>
    (this IEnumerable<T> source) where T : DataRow  
  7. public static void CopyToDataTable<T>(this IEnumerable<T> source,
    DataTable table,LoadOption options) where T : DataRow  
  8. 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: 创建(更新)每一列的当前值
以上介绍LINQ to DataSet查询。

【编辑推荐】

  1. LINQ查询操作经验总结
  2. LINQ遍历多个数组深入剖析
  3. Linq查询Access数据文件浅谈
  4. LINQ构建框架设计学习笔记
  5. LINQ重要组成部分简介
责任编辑:佚名 来源: 51cto.com
相关推荐

2009-09-15 13:59:18

LINQ to Dat

2009-09-08 17:57:54

LINQ to Dat

2009-08-13 11:39:02

LINQ to Dat

2009-09-14 14:49:12

LINQ查询基础知识

2009-11-27 09:41:56

LINQ

2009-08-27 09:13:28

LINQ查询表达式

2009-09-15 15:45:00

Linq联合查询

2009-09-18 14:51:19

LINQ TO SQL

2009-09-16 10:08:06

LINQ查询

2009-09-17 13:15:20

LINQ查询

2009-09-15 10:46:04

LINQ to SQL

2009-09-16 10:38:43

LINQ查询

2009-09-14 10:13:02

LINQ查询操作

2009-09-09 16:53:53

LINQ查询语法

2009-09-10 16:28:17

LINQ查询

2009-09-14 10:09:26

LINQ查询结果

2011-07-26 14:57:39

2009-09-09 10:54:52

Linq存储过程返回

2009-09-14 16:17:03

什么是LINQ To

2010-08-11 09:40:44

LINQ
点赞
收藏

51CTO技术栈公众号