LINQ to DataSet
使用 LINQ to DataSet 可以更快更容易地查询在 DataSet 对象中缓存的数据。具体而言,通过使开发人员能够使用编程语言本身而不是通过使用单独的查询语言来编写查询,LINQ to DataSet 可以简化查询。对于现在可以在其查询中利用 Visual Studio 所提供的编译时语法检查、静态类型和 IntelliSense 支持的 Visual Studio 开发人员,这特别有用。
LINQ to DataSet 也可用于查询从一个或多个数据源合并的数据。这可以使许多需要灵活表示和处理数据的方案(例如查询本地聚合的数据和 Web 应用程序中的中间层缓存)能够实现。具体地说,一般报告、分析和业务智能应用程序将需要这种操作方法。
LINQ to DataSet 功能主要通过 DataRowExtensions 和 DataTableExtensions 类中的扩展方法公开。LINQ to DataSet 基于并使用现有的 ADO.NET 2.0 体系结构生成,在应用程序代码中不能替换 ADO.NET 2.0。现有的 ADO.NET 2.0 代码将继续在 LINQ to DataSet 应用程序中有效。下图阐释了 LINQ to DataSet 与 ADO.NET 2.0 和数据存储区的关系。
以上内容转载自 http://msdn.microsoft.com/zh-cn/library/bb386977.aspx
下面我针对DataRowExtension和DataTableExtension进行一些测试。(备注,Extension是一个语言级别的改进点,属于C# 3.0语法,可以针对现有类型的方法进行扩展)
注意看以上这个SetField方法的图标,以及它的说明
这两个扩展都是在System.Data.DataSetExtensions这个程序集中
DataRow的扩展,增加了两个方法,实际上就是对于数据行的强类型访问
1. Field
http://msdn.microsoft.com/zh-cn/library/system.data.datarowextensions.field.aspx
2. SetField
http://msdn.microsoft.com/zh-cn/library/system.data.datarowextensions.setfield.aspx
下面看一个例子
没有扩展之前的例子
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable products = ds.Tables["Product"];
var query =
from product in products.AsEnumerable()
where !product.IsNull("Color") &&
(string)product["Color"] == "Red"
select new
{
Name = product["Name"],
ProductNumber = product["ProductNumber"],
ListPrice = product["ListPrice"]
};
foreach (var product in query)
{
Console.WriteLine("Name: {0}", product.Name);
Console.WriteLine("Product number: {0}", product.ProductNumber);
Console.WriteLine("List price: ${0}", product.ListPrice);
Console.WriteLine("");
}
使用扩展之后的例子
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable products = ds.Tables["Product"];
var query =
from product in products.AsEnumerable()
where product.Field<string>("Color") == "Red"
select new
{
Name = product.Field<string>("Name"),
ProductNumber = product.Field<string>("ProductNumber"),
ListPrice = product.Field<Decimal>("ListPrice")
};
foreach (var product in query)
{
Console.WriteLine("Name: {0}", product.Name);
Console.WriteLine("Product number: {0}", product.ProductNumber);
Console.WriteLine("List price: ${0}", product.ListPrice);
Console.WriteLine("");
}
DataTable的扩展