[原文作者]:Jonathan Aneja [原文链接]:How LINQ to Dataset works in VB LINQ的核心是要求可以对任何数据源进行可查询,意味着它必需实现IEnumerable接口。(实际上实现起来远比这个复杂,需要详细了解的请参阅Visual Basic 9.0 Language Specification)。现在当我们使用LINQ to Dataset时遇到了一个问题:DataTable没有实现IEnumerable,我们怎样去建立对它的查询呢? 之前我们了解到Visual Studio 2008中包含一个程序集System.Data.DataSetExtensions.dll,里面定义了一个扩展方法AsEnumerable()。形式如下: <Extension()> _ Public Function AsEnumerable(source As DataTable) As EnumerableRowCollection(Of DataRow) 这个函数接受一个DataTable的参数,返回一个实现IEnumerable的对象,从而可以使用LINQ的标准查询操作。你要做的就是导入程序集System.Data(工程模板默认已经做了),然后就可以调用AsEnumerable()来使用针对Dataset的LINQ Dim customers = TestDS.Tables("Customers") Dim franceCustomers = From cust [...]
vbcti
基于WPF LINQ的动态数据模型
[原文作者]:Beth Massi [原文链接]:Dynamic Data Entry with WPF and LINQ 上一节我讲到用XML编写动态WPF UI, 尽管这里的UI是动态生成的,但仍有一处不尽人意的地方,就是我们采用的是一个具体的对象customer(来源于LINQ to SQL classes)。 如果想要我们的应用程序既能够动态生成WPF UI 又能动态地编辑处理数据库里的任何表数据,就需要进一步参数化程序代码 ——而不仅限于customer。 这样只需要修改数据库表的定义而不用更新对象模块和重新编译代码。 实现方法是试图在运行时加载,处理一个简单的无类型的(或者称作通用类型)DataTable,并运用XML literals特性 –为SqlDataAdapter生成SELECT和UPDATE语句。要注意一件事情,这个过程必须依赖数据库验证规则。因此这种方式只能用于处理非常简单的表(缩略语.维护表)。 我需要创建一个强类型(指定类型)的DataTable包含表的定义,用来取代LINQ to SQL模板。这个datatable存储了字段的元数据(字段名,类型,等等)以便我们对表的操作。右键点击项目工程,添加新模板,选择DataSet template。我将它命名为TableSchemaDataSet,然后拖拽Server Explorer-〉Data Connection –〉Northwind Database下的存储过程GetTableSchema(这个已经在前面章节中生成好了)到DataSet 设计器上,自动为我们生成所需的DataTable,重命名为TableSchema,并保存。 接下来精彩的部分。因为我们并不想知道当前表的定义,我们会加载一个通用类型的DataTable生成一个动态的WPF 窗口。DataTable和DataSet都建好了,还有两个步骤需要手动设置。 首先定义一个公共属性(Public Property)存放表名,同时设置默认值为“Shippers”,然后创建一批私有变量引用所需的ADO.NET对象。 Imports <xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> Imports <xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> Imports System.Windows.Markup Imports [...]
Northwind遇到虚拟地球——利用Linq生成VE(虚拟地球)地图
[原文作者]: Beth Massi [原文链接]: Northwind Meets Virtual Earth – Generate VE Maps with LINQ 利用VB9和Linq,你可以很容易地从多个数据源之间创建XML文件,这些数据源包括关系型数据、 XML文件和其它任何可查询对象,因为绝大多数流行的系统之间的交互都是以XML的格式进行的,所以应用是很广泛的。在VB9中SOAP,XAML,HTML,RSS都能够很容易地通过Linq To XML创建。比如, 如果我们想在一个VE生成的地图中显示所有Northwind库中的Customers信息,我们需要怎么做? VE允许我们传递给它一个RSS文档,文档里面的每个item指定了纬度和经度以便能够绘制出他们在地球上的每个位置;这里有两种不同的格式可以传递,其中之一就是GeoRSS标准,我们需要做的就是通过获取customers表中包含的地址信息中的经纬度来创建这个XML,并且将这个GeoRSS传递给虚拟地球;我们可以利用http://geocoder.us 中的服务来获取在美国的Customers的经纬度信息,这个服务能够从许多格式的美国地址(包括Restful RDF)中返回一组对应的经纬度信息,为了从Northwind中的customers表中创建GeoRss,我们可以在Linq查询中使用这个服务。 假设我们在Server Explorer中已经有一个到Northwind库的连接(或者其它的含有地址的数据库也可以),首先添加一个“LINQ TO SQL classes”到你的项目中,将它命名为Northwind.dbml ,并且将Customers表从Server Explorer中拖拉到设计器中,下一步就是在代码文件的头部引入Geo命名空间,因为geo命名空间的http://geocoder.us 服务将返回XML文件,我们将使用到XML文件里的地址信息。 Imports <xmlns:geo=“http://www.w3.org/2003/01/geo/wgs84_pos#“> 现在我们可以写一个查询来为customers创建GeoRSS,因为Northwind库中包含的地址绝大多数是编造的,你可以将这些地址改成真实的,或者我们可以选择居住在Oregon (OR)的Customers,因为那有一些有效的地址。 Dim db As New NorthwindDataContext Dim geoRSS = _ <rss xmlns:geo=“http://www.w3.org/2003/01/geo/wgs84_pos#“> <channel> <title>Northwind Customer [...]
从 SQL 到 LINQ, 第7部分: 合并, TOP, 子查询 (Bill Horst)
[原文作者]:Bill Horst[原文地址]:Converting SQL to LINQ, Part 7: UNION, TOP, Subqueries (Bill Horst) 本文假设您已阅读了本系列中此前发表的文章: 从SQL 到 LINQ, Part 1: 基础(Bill Horst) 从SQL 到 LINQ, Part 2: FROM 和 SELECT(Bill Horst) Converting SQL to LINQ, Part 3: DISTINCT, WHERE, ORDER BY and Operators Converting SQL to LINQ, [...]
从 SQL 到 LINQ, 第6部分: 联接 (Bill Horst)
[原文作者]:Bill Horst [原文链接]:Converting SQL to LINQ, Part 6: Joins (Bill Horst) 本文假设您已阅读了本系列中此前发表的文章: 从SQL 到 LINQ, Part 1: 基础(Bill Horst) 从SQL 到 LINQ, Part 2: FROM 和 SELECT(Bill Horst) Converting SQL to LINQ, Part 3: DISTINCT, WHERE, ORDER BY and Operators Converting SQL to LINQ, Part [...]
