Language-Integrated 查询(LINQ)可以轻松访问数据库信息和执行查询。
以下示例演示如何创建对 SQL Server 数据库执行查询的新应用程序。 该示例使用 Aggregate
和 Group By
子句对结果进行计数、求和与求平均。 有关详细信息,请参阅 聚合子句 和 Group By 子句。
本文中的示例使用 Northwind 示例数据库。 若要获取数据库,请参阅 下载示例数据库.。
注意
计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 个性化集成开发环境。
创建与数据库的连接
在 Visual Studio 中,单击“视图” 菜单上的“服务器资源管理器”/“数据库资源管理器”,打开“服务器资源管理器”/数据库资源管理器。
在 服务器资源管理器/数据库资源管理器 中右键单击 数据连接,然后单击 添加连接。
指定与 Northwind 示例数据库的有效连接。
添加包含 LINQ to SQL 文件的项目
在 Visual Studio 的“文件”菜单上,指向 “新建”,然后单击 项目。 选择 Visual Basic Windows 窗体应用程序 作为项目类型。
在“项目”菜单上,单击 “添加新项”。 选择“LINQ to SQL 类”项模板。
将文件命名为
northwind.dbml
。 单击 添加。 已为 northwind.dbml 文件打开了对象关系设计器(O/R 设计器)。
将要查询的表添加到 O/R 设计器
在 服务器资源管理器/数据库资源管理器中,展开与 Northwind 数据库的连接。 展开 表格 文件夹。
如果已关闭 O/R 设计器,可以通过双击前面添加的 northwind.dbml 文件重新打开它。
单击“客户”表并将其拖到设计器的左窗格中。 单击“订单”表并将其拖到设计器的左窗格中。
设计器为项目创建新的
Customer
和Order
对象。 请注意,设计器会自动检测表之间的关系,并为相关对象创建子属性。 例如,IntelliSense 将显示Customer
对象具有与该客户相关的所有订单的Orders
属性。保存更改并关闭设计器。
保存项目。
添加代码以查询数据库并显示结果
从 工具箱中,将 DataGridView 控件拖到项目 Form1 的默认 Windows 窗体上。
双击“Form1”,将代码添加到该窗体的
Load
事件。将表添加到 O/R 设计器时,设计器为项目添加了 DataContext 对象。 此对象包含必须访问这些表以及访问每个表的各个对象和集合的代码。 项目的 DataContext 对象是根据 .dbml 文件的名称命名的。 对于此项目,DataContext 对象命名为
northwindDataContext
。可以在代码中创建 DataContext 实例,并查询 O/R 设计器指定的表。
将以下代码添加到
Load
事件,以查询作为 DataContext 属性公开的表,并对结果进行计数、求和和平均。 此示例使用Aggregate
子句查询单个结果,Group By
子句显示分组结果的平均值。Dim db As New northwindDataContext Dim msg = "" Dim londonCustomerCount = Aggregate cust In db.Customers Where cust.City = "London" Into Count() msg &= "Count of London Customers: " & londonCustomerCount & vbCrLf Dim averageOrderCount = Aggregate cust In db.Customers Where cust.City = "London" Into Average(cust.Orders.Count) msg &= "Average number of Orders per customer: " & averageOrderCount & vbCrLf Dim venezuelaTotalOrders = Aggregate cust In db.Customers Where cust.Country = "Venezuela" Into Sum(cust.Orders.Count) msg &= "Total number of orders from Customers in Venezuela: " & venezuelaTotalOrders & vbCrLf MsgBox(msg) Dim averageCustomersByCity = From cust In db.Customers Group By cust.City Into Average(cust.Orders.Count) Order By Average DataGridView1.DataSource = averageCustomersByCity 'Another way to grab the count and sum londonCustomerCount = (From cust in db.Customers Where cust.City = "London").Count() venezuelaTotalOrders = (From cust in db.Customers Where cust.Country = "Venezuela" Select cust.Orders).Sum()
按 F5 运行项目并查看结果。